我正在使用CoreData来存储一些数据(不是很大的数量)。我决定添加到我的TVC(显示数据的位置)UISearchDisplayController
,以便用户可以通过文本进行搜索。要在CD中搜索,我正在使用第二个NSFetchedResultsController
。问题是我收到以下错误:'no object at index 2 in section at index 0'
。
我已经检查了几件事来解决问题:
numberOfSectionsInTableView:
,tableView:numberOfRowsInSection:
self.searchDisplayController.searchResultsTableView
我认为是正确的fetchedObjects
中的对象数与tableView:numberOfRowsInSection:
sectionNameKeyPath = nil
)我发现了几个类似的问题,但没有任何帮助。我的实施基于this code
我做错了什么?哪里可能是个错误?如果您需要更多信息,请与我们联系。提前谢谢。
修改:
我最近一直在努力工作。早上回到代码时,我已经意识到了几件事。
解
我一直在使用这样的代码:
- (void)controller:(NSFetchedResultsController *)controller
didChangeObject:(id)anObject
atIndexPath:(NSIndexPath *)indexPath
forChangeType:(NSFetchedResultsChangeType)type
newIndexPath:(NSIndexPath *)newIndexPath {
.
.
.
UITableView *tableView = controller == self.fetchedResultsController ? self.tableView : self.searchDisplayController.searchResultsTableView;
.
.
.
}
当我在搜索开始时self.fetchedResultsController = nil
时,会导致错误。
此外,我一直使用相同的fetchedResultsController。 [self fetchedResultsControllerForTableView:tableView]
(我上面链接的代码中的方法)解决了这个问题。确保使用适当的fetchedResultsController!即使你是,再次检查。
在此之后,我应该得到我的搜索结果...但我没有。
其他事情是使用[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
。看起来还不错,但是在searchDisplayController的tableView中,我没有给定标识符的单元格,所以我需要将它们从self.tableView
出列。
现在我有了搜索结果。
如果您没有自己的,这也可以提供帮助:
- (void)searchDisplayController:(UISearchDisplayController *)controller didLoadSearchResultsTableView:(UITableView *)tableView
{
[tableView registerClass:[NewsCell class] forCellReuseIdentifier:identifier];
}
感谢所有阅读我的问题并花了一分钟思考解决方案的人。