iOS:[self.fetchedResultsController performFetch:& error];使我的应用程序崩溃

时间:2011-05-11 07:09:35

标签: objective-c ios core-data ipad nsfetchedresultscontroller

我有一个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出了问题。

感谢

2 个答案:

答案 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;