我正在使用RestKit 0.20将JSON请求提取到核心数据中。出于某种原因,我必须删除实体中的所有对象(即myEntity)。我正在使用这段代码:
NSManagedObjectContext *moc = self.objectManager.managedObjectStore.mainQueueManagedObjectContext;
[moc saveToPersistentStore:nil];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
fetchRequest.entity = [NSEntityDescription entityForName:@"myEntity"
inManagedObjectContext:moc];
fetchRequest.includesPropertyValues = NO;
NSArray *entries = [moc executeFetchRequest:fetchRequest error:nil];
for (myEntity *entity in entries) {
[moc deleteObject:entity];
}
[moc saveToPersistentStore:nil];
之后,下一个RKObjectRequestOperation输出为“(200 OK / 0个对象)”。但实际上,JSON文档中大约有700个对象。
如果我最后调用[[NSURLCache sharedURLCache] removeAllCachedResponses];
,我会得到所有700个对象,但我有2个RestKit错误(133000):E restkit.core_data.cache:RKEntityByAttributeCache.m:227无法检索托管对象...
任何人都可以帮助我以正确的方式做到这一点吗?
编辑:这是我创建核心数据堆栈的方式:
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"myDataModelName" withExtension:@"momd"];
NSManagedObjectModel *managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
self.managedObjectStore = [[RKManagedObjectStore alloc] initWithManagedObjectModel:managedObjectModel];
[self.managedObjectStore createPersistentStoreCoordinator];
[self.managedObjectStore
addSQLitePersistentStoreAtPath:self.pathToDatabase
fromSeedDatabaseAtPath:nil
withConfiguration:nil
options:@{ NSInferMappingModelAutomaticallyOption: @YES,
NSMigratePersistentStoresAutomaticallyOption: @YES }
error:nil];
[self.managedObjectStore createManagedObjectContexts];
NSManagedObjectContext *moc = self.managedObjectStore.persistentStoreManagedObjectContext;
self.managedObjectStore.managedObjectCache = [[RKInMemoryManagedObjectCache alloc] initWithManagedObjectContext:moc];
managedObjectStore.persistentStoreManagedObjectContext
和managedObjectStore.mainQueueManagedObjectContext
之间是否存在差异?
答案 0 :(得分:1)
最好在对象管理器上指定一个获取请求块,并允许RestKit处理对象的删除。获取请求块允许RestKit在映射过程中查找需要删除的所有对象,同时保持任何内部缓存并最大化数据重用。检查文档here(特别是“获取请求块和删除孤立对象”部分)。
是的,managedObjectStore.persistentStoreManagedObjectContext
和managedObjectStore.mainQueueManagedObjectContext
之间存在差异。
服务器返回的标头Cache-Control: public, max-age=180
告诉URL缓存系统不要为不到3分钟前发出的任何请求请求新结果。因此,在此期间,RestKit实际上不会发送请求,而是从模型中获取对象。
理想情况下,您应该更改返回的标头。但是,实际上,这应该是自动完成的,因为如果您的请求与之前登录的用户不同,那么您的请求应该是不同的。