0

我正在使用 CoreData 并执行以下命令会返回许多对象:

 [Contact findAll];

但是,当我像这样设置一个简单的NSFetchrequest东西时,我得到了 0 个对象。

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];

    fetchRequest.entity = [NSEntityDescription entityForName:@"Contact" inManagedObjectContext:self.context];
    fetchRequest.sortDescriptors = [NSArray arrayWithObject:[[NSSortDescriptor alloc] initWithKey:@"title" ascending:YES]];

    self.fetchedResultsController = [[NSFetchedResultsController alloc] 
                                     initWithFetchRequest:fetchRequest
                                     managedObjectContext:self.context
                                     sectionNameKeyPath:nil
                                     cacheName:nil];

    NSError *error;
    NSArray *array = [self.context executeFetchRequest:fetchRequest error:&error];

请告诉我我在这里做错了什么。由于我没有 Predicate 集,我希望得到相同数量的对象,但我得到一个包含 0 个对象和error = nil.

请注意,这self.context不是零。

4

2 回答 2

2

如果您使用的是 RESTKit,我猜 RESTKit 正在设置自己的核心数据上下文/存储,当您手动执行此操作时,您使用的是 Apple 的 Xcode 模板提供的默认设置。停止使用self.context并从 RESTKit 获取上下文,或使用 RESTKit 的一种便捷方法,例如objectsWithFetchRequest:.

于 2012-04-25T12:30:06.273 回答
1

RestKit 从 0.10 开始维护每个线程的对象存储。如果 RestKit 还没有完成您的数据,这可能会很棘手(即:您的 RKRequestQueue 已经完成,但它仍在处理您的映射)。

您可以使用 Active Record 类别访问外国商店,即:

NSManagedObjectContext *restContext = [[[RKObjectManager sharedManager] objectStore] managedObjectContextForCurrentThread];
NSArray *allTexts = [TextEntity findAllInContext:restContext];

希望这可以帮助!

于 2012-04-25T12:57:33.707 回答