0

アプリを純粋なリモート DB の使用からローカル DB へのリモート DB のプルに変更しています。リモート データベースからオブジェクトの配列を取得しようとすると、このエラーが発生します。

CoreData: error: Failed to call designated initializer on NSManagedObject class 'Class'

何が間違っているのかわかりません。これが私のレストキットのセットアップです。

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

他に何か必要な場合は、お知らせください。そして、あなたが助けてくれれば、私はとても幸せな開発者になります.

ありがとうございました、

-行う

編集

これはpropertyMappingsが返すものです

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

2 に答える 2

1

まず、「Class」はすでにでtypedef struct定義されているため、「Class」というクラスを使用すると問題が発生する可能性がありますobjc.hABCClassクラス名を予約されていないものにリファクタリングすることをお勧めします。

次に、を呼び出して属性マッピングを追加します[Class propertyMappings]。代わりに、次のようなことを行う必要があります。

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

identificationAttributesCore 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);
于 2013-01-22T21:58:48.560 に答える
0

問題は、実際に、私が取り込もうとしていたエンティティが、モデル内のいくつかの関係を介してネストされていたため、親ではなかったことです。エラーを引き起こしていました。APIを少し調整する必要があり、すべてが機能しました。

ご協力いただきありがとうございます。

-行う

于 2013-01-23T14:24:33.540 に答える