http json リソース (カテゴリ リスト) からコンテンツを取得し、restkit および coredata に接続しようとしています。
私のマッピングは、CoreData を使用しなかったときに機能していました。次に、次のチュートリアルを使用することにしました。
http://www.alexedge.co.uk/portfolio/introduction-restkit-0-20/
ただし、奇妙なエラーが発生し、その理由がわかりません。
the entity (null) is not key value coding-compliant for the key "remoteId"
私のカテゴリ モデル/エンティティには、サーバー上の id にマップされた remoteId があるため、これは問題ではありません。ただし、エラーから、RestkitまたはCoreDataは私が話しているエンティティを理解できないようです(彼らはそれがnullエンティティだと言っています??)
これはリクエストコードです:
- (NSFetchedResultsController *)fetchedResultsController{
if (!_fetchedResultsController) {
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:NSStringFromClass([Category class])];
fetchRequest.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES]];
self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:[RKManagedObjectStore defaultStore].mainQueueManagedObjectContext sectionNameKeyPath:nil cacheName:@"Category"];
self.fetchedResultsController.delegate = self;
NSError *error;
[self.fetchedResultsController performFetch:&error];
NSLog(@"%@",[self.fetchedResultsController fetchedObjects]);
NSAssert(!error, @"Error performing fetch request: %@", error);
}
return _fetchedResultsController;
}
そしてマッピング:
+(void) prepareMapping {
RKObjectManager *manager = [RKObjectManager sharedManager];
NSDictionary *categoryAttributes = @{
@"id" : @"remoteId",
@"created_at" : @"updatedAt",
@"created_at" : @"createdAt",
@"name" : @"name",
@"ads_count": @"adsCount",
};
RKEntityMapping *categoryMapping = [RKEntityMapping mappingForEntityForName:@"Category" inManagedObjectStore:manager.managedObjectStore];
[categoryMapping addAttributeMappingsFromDictionary:categoryAttributes];
categoryMapping.identificationAttributes = @[@"remoteId"];
[manager addResponseDescriptorsFromArray:@[
[RKResponseDescriptor responseDescriptorWithMapping:categoryMapping
pathPattern:@"neighborhoods/:neighborhoodId/categories.json"
keyPath:@"index_categories.index_category"
statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]
]];
}