我的抓取工作存在很大问题,实在不知道我的错误在哪里。
问题出在viewWillAppear函数中,我将我的东西加载到tableView中,这就是代码:
NSNotificationCenter * theCenter = [NSNotificationCenter defaultCenter];
NSFetchedResultsController *theController = [[NSFetchedResultsController alloc] initWithFetchRequest:self.fetchRequest managedObjectContext:context sectionNameKeyPath:nil cacheName:nil];
NSError *theError = nil;
theController.delegate = self;
//everything fine
self.fetchedResultsController = theController;
//program stops
if(![self.fetchedResultsController performFetch:&theError]) {
NSLog(@"viewDidLoad: %@", theError);
}
[theCenter addObserver:self
selector:@selector(managedObjectContextDidSave:)
name:NSManagedObjectContextDidSaveNotification
object:nil];
[tableView reloadData];
fetchedResultController存在一些问题,但我真的不知道是什么类型的。 错误消息是:
2013-10-22 10:53:04.750 myAppName[508:c07] CoreData: error: Serious application error. An exception was caught from the delegate of NSFetchedResultsController during a call to -controllerDidChangeContent:. *** -[__NSArrayM objectAtIndex:]: index 1 beyond bounds [0 .. 0] with userInfo (null)
编辑:NSFetcheResultsControllerDelegate:
- (void)controllerDidChangeContent:(NSFetchedResultsController *)inController {
[tableView endUpdates];
}
答案 0 :(得分:0)
为什么不选择Apple的核心数据模板?这会懒惰地创建获取的结果控制器,这是处理数据获取的首选方法。通过例如重新加载表时隐式调用它objectAtIndexPath
。
要从模板中获取FRC,请从主视图控制器的底部创建一个新项目Master-Detail并进行复制。
我相信您的错误是由多次调用获取的结果控制器属性引起的。您将注意到代码的细微差别:本地创建的FRC被分配给实例变量_fetchedResultsController
,而整个方法是self.fetchedResultsController
的getter。