我正在使用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
不是零。
答案 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];
希望这有帮助!