【问题标题】:NULL error returned from crashing NSFetchedResultsControllerNSFetchedResultsController 崩溃返回 NULL 错误
【发布时间】:2013-02-25 12:32:36
【问题描述】:

我正在尝试设置一个基本的NSFetchedResultsController,它从下面的错误中向我抛出了一个“null”错误。由于错误及其 userInfo 都为 null,我不知道我什至可以开始做些什么来找出问题所在。这是那些“让你的头撞到砖墙上却不被告知原因”的编程时刻之一。这是导致崩溃的部分,位于viewDidLoad

NSError *error;
if (![_fetchedResultsController performFetch: &error]) {
    NSLog(@"Error! %@, %@", error, [error userInfo]);
    abort();
}

这是设置控制器的方法:

- (NSFetchedResultsController *) fetchedResultsController
{
    if (_fetchedResultsController != nil) {
        return _fetchedResultsController;
    }

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName: @"Quote" inManagedObjectContext: [self managedObjectContext]];
    [fetchRequest setEntity:entity];

    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:nil ascending: YES];
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
    [fetchRequest setSortDescriptors:sortDescriptors];

    [fetchRequest setFetchBatchSize: 50];

    NSFetchedResultsController *theFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest: fetchRequest managedObjectContext: [self managedObjectContext] sectionNameKeyPath: nil cacheName: @"Root"];
    self.fetchedResultsController = theFetchedResultsController;
    _fetchedResultsController.delegate = self;

    return _fetchedResultsController;
}

我做错了什么?

【问题讨论】:

    标签: ios objective-c core-data nsfetchedresultscontroller


    【解决方案1】:

    尝试替换

    [_fetchedResultsController performFetch:&error]
    

    而不是

    [self.fetchedResultsController performFetch:&error]
    

    因为如果_fetchedResultsController没有被分配,你就不会派发-fetchedResultsController方法,只有你使用self.fetchedResultsController,才会派发getter方法。

    【讨论】:

    • 好像明白了,谢谢。我现在在数组上得到一个对象不能为 nil 错误..
    • 我在这一行得到它:` NSFetchedResultsController *theFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest: fetchRequest managedObjectContext: [self managedObjectContext] sectionNameKeyPath: nil cacheName: @""]; `
    • @lukech 您在分配视图控制器时是否保留了 managedObjectContext ?顺便说一句,最好提出一个新问题,而不是继续答案下方的 cmets。 :)
    • 保留了吗?我不确定你的意思,我正在使用 ARC。
    • @lukech 例如YourViewController * yourViewController = [[YourViewController alloc] init...]; yourViewController.managedObjectContext = self.managedObjectContext; 这里YourViewController 是你的fetchedResultsController 所在的类。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-30
    相关资源
    最近更新 更多