我在我的设备上收到警告“restkit.core_data:RKManagedObjectMappingOperationDataSource.m:264管理对象缓存返回了2个与'MyEntity'实体配置的标识符相同的对象,预期为1个”,但模拟器上从未出现过。
模拟器中的sqlite数据库没问题,但是在设备上有相同的重复条目。如果我删除数据库,则警告会在一段时间后再次弹出,但仅在设备上发生。
我使用Restkit 0.23.1将JSON数据导入核心数据,并删除孤立的对象。设置了 identificationAttributes。
是否有任何想法,是否有模拟器和设备之间可能导致此问题的差异?
感谢您的帮助。
编辑:
我对各种实体都出现错误。这是我对实体ResellerType的映射(每个实体只有一个映射):
模拟器中的sqlite数据库没问题,但是在设备上有相同的重复条目。如果我删除数据库,则警告会在一段时间后再次弹出,但仅在设备上发生。
我使用Restkit 0.23.1将JSON数据导入核心数据,并删除孤立的对象。设置了 identificationAttributes。
是否有任何想法,是否有模拟器和设备之间可能导致此问题的差异?
感谢您的帮助。
编辑:
我对各种实体都出现错误。这是我对实体ResellerType的映射(每个实体只有一个映射):
RKEntityMapping *mapping = [RKEntityMapping mappingForEntityForName:@"ResellerType"
inManagedObjectStore:[YPIDataProvider sharedDataProvider].objectManager.managedObjectStore];
[mapping addAttributeMappingsFromArray:@[ @"resellerTypeId",
@"resellerTypeName",
@"position" ]];
mapping.identificationAttributes = @[ @"resellerTypeId" ];
我与Reseller
表有一个一对多
的关系,与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([[NSURLCache sharedURLCache] removeAllCachedResponses]
)。你能发现这里有什么问题吗?
感谢阅读!
[_mapping setIdentificationAttributes:@[ @"objectId" ]];
其中 objectId 是核心数据对象的主键。 - electronix384128