RestKit 0.20 with Core Data:删除对象

时间:2013-11-05 19:14:21

标签: core-data restkit restkit-0.20

我正在使用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.persistentStoreManagedObjectContextmanagedObjectStore.mainQueueManagedObjectContext之间是否存在差异?

1 个答案:

答案 0 :(得分:1)

最好在对象管理器上指定一个获取请求块,并允许RestKit处理对象的删除。获取请求块允许RestKit在映射过程中查找需要删除的所有对象,同时保持任何内部缓存并最大化数据重用。检查文档here(特别是“获取请求块和删除孤立对象”部分)。


是的,managedObjectStore.persistentStoreManagedObjectContextmanagedObjectStore.mainQueueManagedObjectContext之间存在差异。

服务器返回的标头Cache-Control: public, max-age=180告诉URL缓存系统不要为不到3分钟前发出的任何请求请求新结果。因此,在此期间,RestKit实际上不会发送请求,而是从模型中获取对象。

理想情况下,您应该更改返回的标头。但是,实际上,这应该是自动完成的,因为如果您的请求与之前登录的用户不同,那么您的请求应该是不同的。