まずはコアデータを使わずに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'