1

まずはコアデータを使わずにrestKitを実装してみました。すべてが機能しました。しかし、今はコアデータも実装したいと思っています。すべてのコアデータとマッピングを入れる別のクラスを作成しました。

その中にinit関数を作成しました。これは次のようになります。

-(API *)init{

self = [super init];

if (self != nil){

    NSURL *baseURL = [NSURL URLWithString:@"http://virtuele-receptie.preview.sanmax.be"];

    AFHTTPClient* client = [[AFHTTPClient alloc] initWithBaseURL:baseURL];

    [client setDefaultHeader:@"Accept" value:RKMIMETypeJSON];

    objectManager = [RKObjectManager managerWithBaseURL:baseURL];

    _managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];

    managedObjectStore = [[RKManagedObjectStore alloc] initWithManagedObjectModel:_managedObjectModel];

    objectManager.managedObjectStore = managedObjectStore;

}

return self;

}

次に、json をコア データ エンティティにマップする関数 mapLogin があります。このメソッドで変更したのは、

RKObjectMapping *dataMapping = [RKObjectMapping mappingForClass:[Data class]];

 RKEntityMapping* dataMapping = [RKEntityMapping mappingForEntityForName:@"Data" inManagedObjectStore:managedObjectStore];

実行すると、巨大なログが表示されます。しかし、最も重要なことはそこにあると思います。

ログ

W restkit:RKObjectManager.m:488 Asked to create an `RKManagedObjectRequestOperation` object, but managedObjectStore is nil.

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

Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<Data 0x1fd0b390> valueForUndefinedKey:]: the entity (null) is not key value coding-compliant for the key "status".'

編集 OKé、RKObjectManagerを初期化した後、managedObjectstoreを配置しました。

   objectManager = [[RKObjectManager alloc] initWithHTTPClient:client];
        objectManager.managedObjectStore = managedObjectStore;

しかし、今では次のエラーが発生しました。

** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: self.managedObjectContext'
4

1 に答える 1

0

管理対象オブジェクト ストアを作成したら、次のようにします。

[managedObjectStore createPersistentStoreCoordinator];
NSString *storePath = [RKApplicationDataDirectory() stringByAppendingPathComponent:@"RKTwitter.sqlite"];
NSString *seedPath = [[NSBundle mainBundle] pathForResource:@"RKSeedDatabase" ofType:@"sqlite"];
NSError *error;
NSPersistentStore *persistentStore = [managedObjectStore addSQLitePersistentStoreAtPath:storePath fromSeedDatabaseAtPath:seedPath withConfiguration:nil options:nil error:&error];
NSAssert(persistentStore, @"Failed to add persistent store with error: %@", error);

// Create the managed object contexts
[managedObjectStore createManagedObjectContexts];
于 2013-01-17T16:52:09.477 に答える