CoreData:findAll返回对象,但简单的fetchRequest确实返回0个对象

时间:2012-04-25 11:49:20

标签: objective-c ios core-data nsfetchrequest

我正在使用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不是零。

2 个答案:

答案 0 :(得分:2)

如果您正在使用RESTKit,我猜测RESTKit正在设置自己的Core Data上下文/存储,当您手动执行时,您将使用Apple的Xcode模板提供的默认值。停止使用self.context并从RESTKit获取上下文,或使用RESTKit的便捷方法之一,例如objectsWithFetchRequest:

答案 1 :(得分:1)

从0.10开始的RestKit维护每线程对象存储。如果RestKit尚未完成您的数据(例如:您的RKRequestQueue已完成但仍处理您的映射),这可能会非常棘手。

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

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

希望这有帮助!