如何将项目添加到UITableView? [英] How to add item to UITableView?

查看:154
本文介绍了如何将项目添加到UITableView?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用按钮将项目添加到 UITableView ,这是我的代码:

I am trying to add items to a UITableView with a button, here is my code:

In viewDidLoad repository = [[NSMutableArray alloc] initWithObjects:nil];

//ADD ITEM TO LIST
                [repository addObject:repo]; //repository is a NSMutableArray
                NSIndexPath *indexPath = [NSIndexPath indexPathForRow:([repository count]-1) inSection:0];
                NSLog(@"Indexpath to add row ----> %ld", (long)indexPath.row);
                [self.tableView beginUpdates];
                [self.tableView insertRowsAtIndexPaths:@[indexPath]withRowAnimation:UITableViewRowAnimationBottom];
                [self.tableView endUpdates];

它现在将项目广告到列表中,但前提是

It now ads the item to the list, but only if there already is an Cell in the

UITableViewController like i configured here: - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    NSLog(@"NSMutableArray count in \"numbersOfRowsInSection\" ----> %lu", (unsigned long)[repository count]);

    return [repository count] + 1;

}

这是我的日志:

Indexpath to add row ----> <NSIndexPath: 0x10d9499a0> {length = 2, path = 0 - 18446744073709551615} //This is "NSIndexPath *indexPath = [NSIndexPath indexPathForRow:[repository count] - 1 inSection:0];" 
2013-10-22 14:48:42.214 ApplicationName[41213:a0b] NSMutableArray count in "numbersOfRowsInSection" ----> 0 //This is the NSInteger returned in - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
2013-10-22 14:48:42.217 ApplicationName[41213:a0b] *** Assertion failure in -[UITableView _endCellAnimationsWithContext:], /SourceCache/UIKit_Sim/UIKit-2903.2/UITableView.m:1330
2013-10-22 14:48:42.236 ApplicationName[41213:a0b] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid update: invalid number of rows in section 0.  The number of rows contained in an existing section after the update (0) must be equal to the number of rows contained in that section before the update (0), plus or minus the number of rows inserted or deleted from that section (1 inserted, 0 deleted) and plus or minus the number of rows moved into or out of that section (0 moved in, 0 moved out).'
*** First throw call stack:
(
    0   CoreFoundation                      0x0000000101cdf795 __exceptionPreprocess + 165
    1   libobjc.A.dylib                     0x00000001019bb991 objc_exception_throw + 43
    2   CoreFoundation                      0x0000000101cdf61a +[NSException raise:format:arguments:] + 106
    3   Foundation                          0x0000000101558bf9 -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 189
    4   UIKit                               0x00000001006d51db -[UITableView _endCellAnimationsWithContext:] + 11410
    5   ApplicationName                           0x0000000100009b5d -[RepositoryViewController alertView:clickedButtonAtIndex:] + 829
    6   UIKit                               0x0000000100b1dbd8 -[_UIModalItemsCoordinator _notifyDelegateModalItem:tappedButtonAtIndex:] + 151
    7   UIKit                               0x0000000100707629 -[_UIModalItemAlertContentView tableView:didSelectRowAtIndexPath:] + 364
    8   UIKit                               0x00000001006e3d36 -[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:] + 1312
    9   UIKit                               0x00000001006e3e5f -[UITableView _userSelectRowAtPendingSelectionIndexPath:] + 221
    10  UIKit                               0x000000010063b0d2 _applyBlockToCFArrayCopiedToStack + 316
    11  UIKit                               0x000000010063af50 _afterCACommitHandler + 460
    12  CoreFoundation                      0x0000000101caaf97 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23
    13  CoreFoundation                      0x0000000101caaf07 __CFRunLoopDoObservers + 391
    14  CoreFoundation                      0x0000000101c8a672 __CFRunLoopRun + 946
    15  CoreFoundation                      0x0000000101c89ed3 CFRunLoopRunSpecific + 467
    16  GraphicsServices                    0x0000000102efa3a4 GSEventRunModal + 161
    17  UIKit                               0x0000000100623a63 UIApplicationMain + 1010
    18  ApplicationName                           0x000000010000aae3 main + 115
    19  libdyld.dylib                       0x00000001067fd7e1 start + 0
    20  ???                                 0x0000000000000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb) 


推荐答案

更新:

首先,您的numberOfRowsInSection:方法应返回代表您的数据源的确切数量行。在这种情况下,存储库:

First of all, your numberOfRowsInSection: method should return the exact amount rows in whatever represents your datasource. In this case, repository:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [repository count];
}

其次,每当用户按下按钮添加新单元格时,首先需要将项添加到数据源,然后需要插入单元格。

Secondly, whenever a user presses the button add a new cell, you first need to add an item to your datasource, and then you need insert the cell itself.

- (void)didPressButton
{
   [repository addObject:repo]; //repository is a NSMutableArray
   NSIndexPath *indexPath = [NSIndexPath indexPathForRow:[repository indexOfObject:repo] inSection:0];
   [self.tableView beginUpdates];
   [self.tableView
insertRowsAtIndexPaths:@[indexPath]withRowAnimation:UITableViewRowAnimationBottom];
   [self.tableView endUpdates];
}

就这么简单。

这篇关于如何将项目添加到UITableView?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆