我有一个UITableViewController,我想用核心数据模型的内容来提供它。 但是,当我获取内容时,我的应用程序崩溃了。这是init方法(我将NSManagedObjectContext传递给它)。
- (id)initInManagedObjectContext:(NSManagedObjectContext *)context
{
self = [super initWithStyle:UITableViewStylePlain];
if (self) {
NSFetchRequest *request = [[NSFetchRequest alloc] init];
request.entity = [NSEntityDescription entityForName:@"Document" inManagedObjectContext:context];
request.predicate = nil;
request.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"idDoc"
ascending:YES]];
/*
NSError *error = nil;
NSManagedObject *retrievedDocument = [[context executeFetchRequest:request error:&error] lastObject];
NSLog(@"retrievedDocument %@", retrievedDocument);
*/
NSFetchedResultsController *frc = [[NSFetchedResultsController alloc]
initWithFetchRequest:request
managedObjectContext:context
sectionNameKeyPath:nil
cacheName:@"CollectionCache"];
self.fetchedResultsController = frc;
[frc release];
[request release];
//HERE IT CRASHES
NSError *error;
[self.fetchedResultsController performFetch:&error];
if (error) {
// Update to handle the error appropriately.
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
//exit(-1); // Fail
}
}
return self;
}
我确定上下文已正确传递,因为如果我取消注释已注释的代码段,则会正确打印存储的数据。
我的猜测是fetchedResultsController出了问题。
感谢
答案 0 :(得分:2)
该例外与您错误使用performFetch:
它返回一个BOOL,告诉你fetch的成功。如果您收到NO,则可以检查NSError对象。否则你不能碰它。
使用& error的所有方法都应该像这样使用:
NSError *error;
if (![self.fetchedResultsController performFetch:&error]) {
// Update to handle the error appropriately.
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
//exit(-1); // Fail
}
答案 1 :(得分:0)
该异常与fetchedResultsController无关,但由于未初始化的NSError
NSError * error = nil;