Restkit& CoreData错误。无法在NSManagedObject上调用指定的初始值设定项

时间:2013-01-22 21:37:54

标签: ios core-data restkit

我正在使用纯远程数据库将我的应用程序更改为将远程数据库拉入本地数据库。当我试图从远程数据库获取一个对象数组时,我收到此错误。

CoreData: error: Failed to call designated initializer on NSManagedObject class '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];

这是我正在提出的请求,它失败的地方(我想在回复上)。

    [manager getObjectsAtPath:@"class.json" parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult){
    NSLog(@"Success");

    }failure:^(RKObjectRequestOperation *operation, NSError *error) {}];

如果您还有其他需要,请告诉我。 如果你能帮忙,我将是一个非常开心的开发者。

谢谢,

-DO

修改

这是propertMappings返回的内容

+ (NSDictionary *) propertyMappings{return @{@"id" : @"iD", @"name" : @"name", @"image_url" : @"image_url"};}

2 个答案:

答案 0 :(得分:1)

首先,我怀疑你有一个名为“Class”的课程会有问题,因为“Class”已经是typedef struct中定义的objc.h。我建议将您的班级名称重构为ABCClass或非保留的名称。

其次,您通过调用[Class propertyMappings]添加属性映射。你应该做这样的事情:

[classMapping addAttributeMappingsFromDictionary:@{
 @"_id" : @"objectId",
 @"first_name":@"firstName",
 @"last_name":@"lastName"
 }];

不要忘记将identificationAttributes添加到映射中,以防止核心数据中出现重复的对象。

最后,您是否在设置的任何阶段创建了实际的sqlite文件?在您致电-(void)createManagedObjectContexts

之前,请在初始化结束时尝试以下操作
[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);

答案 1 :(得分:0)

问题实际上是我试图引入的实体是通过我的模型中的一些关系嵌套的,因此它不是父级。这导致了错误。我不得不稍微调整一下api,一切正常。

感谢您的帮助。

-DO