我有一个tableView,它使用NSFetchedResultsController直接从Core Data表加载其数据。我没有使用中间NSMutableArray来存储获取结果中的对象;
我基本上在我的UITableViewController里面实现了协议方法numberOfRowsInSection,并在NSFetchedResultsSectionInfo中返回numberOfObjects。
id <NSFetchedResultsSectionInfo> sectionInfo = [[fetchedResultsController sections] objectAtIndex:section];
然后我通过实现configureCell:atIndexPath并从fetchedResultController检索对象信息来配置单元格内容,但是现在我对任何对象都有一个通用配置(以避免复杂化)
cell.textLabel.text = @"categoria";
我还有一个NavigationBar,右边有一个自定义编辑按钮,可以加载我自己的名为customSetEditing的选择器。我想要完成的是在tableView的开头加载一个“Insert Cell”,这样当我点击它时,它会创建一个新的记录。最后一部分很容易实现,问题是当我点击导航栏编辑按钮时,我似乎无法加载插入行或任何行。
这是我的customSetEditing的代码:
- (void) customSetEditing {
[super setEditing:YES animated:YES];
[self.tableView setEditing:YES animated:YES];
[[self tableView] beginUpdates];
//[[self tableView] beginUpdates];
UIBarButtonItem *customDoneButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(customDone)];
[self.navigationItem.rightBarButtonItem release];
self.navigationItem.rightBarButtonItem = customDoneButtonItem;
//[categoriasArray insertObject:[NSNull null] atIndex:0];
NSMutableArray *indexPaths = [[NSMutableArray alloc] initWithObjects:[NSIndexPath indexPathForRow:0 inSection:0],nil ];
[self.tableView insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationTop];
//[indexPaths release];
[self.tableView reloadData];}
在添加:[self.tableView reloadData];
之前,我遇到了越界错误加上程序崩溃,虽然程序没有崩溃但是没有加载任何内容。
我在stackoverflow中看到过很多类似情况的例子(顺便说一句,这是一个非常有帮助且很好的人的优秀论坛),这些例子似乎都不适用于我。
有什么想法吗?
答案 0 :(得分:0)
您知道我刚刚发现应用程序在此方法中的注释行崩溃了:
- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath {
//NSManagedObject *managedObject = [fetchedResultsController objectAtIndexPath:indexPath];
cell.textLabel.text = @"categoria";
}
如果我评论该行,它是有效的。这可能是因为在开始时获取的结果控制器中根本没有数据,事情是我需要该行,所以我尝试了:
- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath {
if (![fetchedResultsController objectAtIndexPath:indexPath]) {
cell.textLabel.text = @"categoria";
}
else{
NSManagedObject *managedObject = [fetchedResultsController objectAtIndexPath:indexPath];
cell.textLabel.text = @"categoria";
}
}
但仍然崩溃。
答案 1 :(得分:0)
如果您的桌子为空,则不应调用-configureCell:atIndexPath:
。您的-tableView:rowsInSection:
方法看起来像什么?
答案 2 :(得分:0)
这是代码(抱歉我不知道如何解决堆栈溢出问题):
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
// Return the number of rows in the section.
id <NSFetchedResultsSectionInfo> sectionInfo = [[fetchedResultsController sections] objectAtIndex:section];
if (self.tableView.editing) {
return ([sectionInfo numberOfObjects]+1);
}
return [sectionInfo numberOfObjects];
}