Ios Restkit&;CoreData错误。未能在NSManagedObject上调用指定的初始值设定项
我正在将我的应用程序从使用纯远程数据库改为将远程数据库拉入本地数据库。当我试图从远程数据库获取对象数组时,出现了此错误Ios Restkit&;CoreData错误。未能在NSManagedObject上调用指定的初始值设定项,ios,core-data,restkit,Ios,Core Data,Restkit,我正在将我的应用程序从使用纯远程数据库改为将远程数据库拉入本地数据库。当我试图从远程数据库获取对象数组时,出现了此错误 CoreData:错误:调用NSManagedObject类“class”上的指定初始值设定项失败。 我不确定我做错了什么。这是我的restkit设置 RKObjectManager *manager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:@"http://fake.herokuapp.com"]]
CoreData:错误:调用NSManagedObject类“class”上的指定初始值设定项失败。
我不确定我做错了什么。这是我的restkit设置
RKObjectManager *manager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:@"http://fake.herokuapp.com"]];
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"App" withExtension:@"momd"];
NSManagedObjectModel *managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
RKManagedObjectStore *managedObjectStore = [[RKManagedObjectStore alloc] initWithManagedObjectModel:managedObjectModel];
manager.managedObjectStore = managedObjectStore;
RKEntityMapping *classMapping = [RKEntityMapping mappingForEntityForName:@"Class" inManagedObjectStore:managedObjectStore];
[classMapping addAttributeMappingsFromDictionary:[Class propertyMappings]];
NSIndexSet *statusCodes = RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful);
RKResponseDescriptor *classDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:classMapping pathPattern:@"/class.json" keyPath:@"" statusCodes:statusCodes];
[manager addResponseDescriptorsFromArray:@[classDescriptor]];
[managedObjectStore createManagedObjectContexts];
managedObjectStore.managedObjectCache = [[RKInMemoryManagedObjectCache alloc] initWithManagedObjectContext:managedObjectStore.persistentStoreManagedObjectContext];
[RKObjectManager setSharedManager:manager];
这是我提出的请求,它失败了(我认为是在回应中)
如果你还需要什么,请告诉我。
如果你能帮忙,我将是一个非常快乐的开发者
谢谢,
-做
编辑
这就是propertMappings返回的结果
+ (NSDictionary *) propertyMappings{return @{@"id" : @"iD", @"name" : @"name", @"image_url" : @"image_url"};}
首先,我怀疑使用名为“class”的类会有问题,因为“class”已经是
objc.h
中定义的typedef结构。我建议将您的类名重构为ABCClass
或其他非保留类
其次,通过调用[Class propertyMappings]
添加属性映射。相反,您应该这样做:
[classMapping addAttributeMappingsFromDictionary:@{
@"_id" : @"objectId",
@"first_name":@"firstName",
@"last_name":@"lastName"
}];
不要忘记将identificationAttributes
添加到映射中,以防止核心数据中出现重复对象
最后,您是否在设置的任何阶段创建实际的sqlite文件?在初始化结束时,在调用-(void)CreateManagedObjectContext
之前,尝试以下操作:
[managedObjectStore createPersistentStoreCoordinator];
NSString *storePath = [RKApplicationDataDirectory() stringByAppendingPathComponent:@"App.sqlite"];
NSError *error;
NSPersistentStore *persistentStore = [managedObjectStore addSQLitePersistentStoreAtPath:storePath fromSeedDatabaseAtPath:nil withConfiguration:nil options:nil error:&error];
NSAssert(persistentStore, @"Failed to add persistent store with error: %@", error);
实际上,问题是我试图拉入的实体是通过模型中的几个关系嵌套的,所以它不是父对象。这导致了一个错误。我不得不稍微调整一下api,一切正常
谢谢你的帮助
-DO课堂正是我所说的课堂。我不想把实际的类名放在这里。第二件事,我发布了一个关于what+(NSDictionary*)propertyMappings的更新;returnsOkay,这更有意义。您在代码中的任何时候都在调用[Class new]或[Class alloc]init]吗?我忘了做最后一部分了。但是我把它放进去了,我仍然得到了同样的错误。我发现了问题所在。“类”实体实际上是通过一些关系嵌套的,而不是父实体。这实际上是我的api设置方式的问题。谢谢你的帮助,如果我没有把它放在最后一部分,我可能会出错。此外,我会将你的答案标记为正确答案,但这会误导下一位参与者,因此我会写我自己的答案。谢谢你
[managedObjectStore createPersistentStoreCoordinator];
NSString *storePath = [RKApplicationDataDirectory() stringByAppendingPathComponent:@"App.sqlite"];
NSError *error;
NSPersistentStore *persistentStore = [managedObjectStore addSQLitePersistentStoreAtPath:storePath fromSeedDatabaseAtPath:nil withConfiguration:nil options:nil error:&error];
NSAssert(persistentStore, @"Failed to add persistent store with error: %@", error);