Restkit仅在设备上创建重复项(错误:“托管对象缓存返回2个对象”),而不是在模拟器中

时间:2014-07-25 09:57:56

标签: ios core-data restkit

我收到警告" restkit.core_data:RKManagedObjectMappingOperationDataSource.m:264托管对象缓存返回了2个对象,这些对象是为' MyEntity'实体,预期1。"只在我的设备上,但从不在模拟器中。

模拟器中的sqlite数据库很好,但在设备上我有相同的重复条目。如果我删除数据库,一段时间后会再次弹出警告。但只能在设备上使用。

我使用Restkit 0.23.1将JSON数据导入核心数据并删除孤立对象。 identifyAttributes已设置。

如果模拟器和设备之间存在可能导致此问题的差异,是否有任何想法?

感谢您的帮助。

修改

我收到各种实体的错误。这是我对实体ResellerType的映射(我每个实体只有一个映射):

RKEntityMapping *mapping = [RKEntityMapping mappingForEntityForName:@"ResellerType"
                                               inManagedObjectStore:[YPIDataProvider sharedDataProvider].objectManager.managedObjectStore];
[mapping addAttributeMappingsFromArray:@[ @"resellerTypeId",
                                          @"resellerTypeName",
                                          @"position" ]];
mapping.identificationAttributes = @[ @"resellerTypeId" ];

我与To Many表格有Reseller的关系,与我的Many To Many表格有MetaData的关系。

这是我的RestKit设置:

NSError *error = nil;

NSURL *modelURL = [[NSBundle mainBundle] URLForResource:kDataModelName 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:&error];

[self.managedObjectStore createManagedObjectContexts];

// managedObjectCache: Configure a managed object cache to ensure we do not create duplicate objects:
NSManagedObjectContext *moc = self.managedObjectStore.persistentStoreManagedObjectContext;
self.managedObjectStore.managedObjectCache = [[RKInMemoryManagedObjectCache alloc]
                                              initWithManagedObjectContext:moc];

我在向服务器发送请求([[NSURLCache sharedURLCache] removeAllCachedResponses])之前删除了NSURLCache。你能在这里发现什么问题吗?

感谢您阅读所有这些内容!

1 个答案:

答案 0 :(得分:1)

我在问题#1613中找到了RestKit的答案:https://github.com/RestKit/RestKit/issues/1613 如果发生内存警告,RestKit会刷新缓存。如果正在进行映射操作,则之后可能会出现重复数据。

我在 RKEntityByAttributeCache.m 中的didReceiveMemoryWarning中删除了[self flush:nil];,问题就消失了。