簡體   English   中英

Restkit和CoreData錯誤。 無法在NSManagedObject上調用指定的初始化程序

[英]Restkit & CoreData Error. Failed to call designated initializer on NSManagedObject

我正在將應用程序從使用純遠程數據庫更改為將遠程數據庫拉入本地數據庫。 當我嘗試從遠程數據庫中獲取對象數組時,出現此錯誤。

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) {}];

如果您還有其他需要,請告訴我。 如果您能提供幫助,我將是一個非常高興的開發人員。

謝謝,

-做

編輯

這就是propertMappings返回的內容

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

首先,我懷疑您將遇到一個名為“ Class”的類,因為“ Class”已經是objc.h定義的typedef struct 我建議將您的類名稱重構為ABCClass或沒有保留的名稱。

其次,通過調用[Class propertyMappings]添加屬性映射。 您應該改為執行以下操作:

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

不要忘記在映射中添加identificationAttributes ,以防止Core Data中出現重復的對象。

最后,您是否在設置的任何階段創建了實際的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);

好吧,問題實際上是我試圖插入的實體通過模型中的一些關系嵌套,因此它不是父實體。 導致錯誤。 我不得不稍微調整一下api,一切正常。

謝謝你的幫助。

-做

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM