1

我的获取有一个大问题,真的不知道我的错误在哪里。

问题出在 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]; 
} 
4

1 回答 1

0

为什么不使用 Apple 的 Core Data 模板?这会延迟创建 fetched results 控制器,这是处理数据获取的首选方式。当您通过 eg 重新加载表时,它会被隐式调用objectAtIndexPath

要从模板中获取 FRC,请创建一个新项目 Master-Detail 并从主视图控制器的底部复制。

我相信您的错误是由多次调用 fetched results 控制器属性引起的。您会注意到代码的细微差别:本地创建的 FRC 被分配给实例变量_fetchedResultsController,而整个方法是self.fetchedResultsController.

于 2013-10-23T18:45:46.287 回答