[英]RestKit 0.20: Map relational data from local file
I'm taking a local JSON file and trying to map it into a relational mapping. 我正在使用本地JSON文件并尝试将其映射到关系映射。 It works fine without the relationship, but once I add the relationship, I get an error. 没有关系,它工作正常,但一旦我添加了关系,我就会收到错误。
JSON: JSON:
https://gist.github.com/4675414 https://gist.github.com/4675414
Code: 码:
// Get json from destination
NSString *myJSON = [[NSString alloc] initWithContentsOfFile:contentPath encoding:NSUTF8StringEncoding error:NULL];
NSString* MIMEType = @"application/json";
NSError* parseError;
NSData *data = [myJSON dataUsingEncoding:NSUTF8StringEncoding];
id parsedData = [RKMIMETypeSerialization objectFromData:data MIMEType:MIMEType error:&parseError];
if (parsedData == nil && parseError) {
NSLog(@"Cannot parse data: %@", parseError);
}
// Setting up objectmapping for issue
RKObjectMapping *issueMapping = [RKObjectMapping mappingForClass:[Issue class]];
[issueMapping addAttributeMappingsFromDictionary:@{
@"title": @"title",
@"description": @"description",
@"cover_url": @"cover_url",
@"published_at": @"published_at",
@"issue_number": @"issue_number"
}];
//Setting up objectmapping for article
RKObjectMapping *articleMapping = [RKObjectMapping mappingForClass:[Article class]];
[articleMapping addAttributeMappingsFromDictionary:@{
@"title": @"title",
@"main_text": @"main_text",
@"article_image_url": @"article_image_url"
}];
[issueMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"articles" toKeyPath:@"articles" withMapping:articleMapping]];
Issue *issue = [[Issue alloc] init];
RKMappingOperation* mapper = [[RKMappingOperation alloc] initWithSourceObject:[parsedData objectForKey:@"issue"] destinationObject:issue mapping:issueMapping];
RKManagedObjectMappingOperationDataSource *mappingDS = [RKManagedObjectMappingOperationDataSource new];
mapper.dataSource = mappingDS;
[mapper performMapping:&parseError];
NSLog(@"Parse error: %@", parseError);
NSLog(@"Issue title: %@", issue.title);
Error: 错误:
2013-01-30 13:07:42.486 uninkd[13722:907] *** Assertion failure in -[RKManagedObjectMappingOperationDataSource mappingOperation:targetObjectForRepresentation:withMapping:inRelationship:], /Users/holgersindbaek/Projects/Uninkd/Uninkd_IOS/Pods/RestKit/Code/CoreData/RKManagedObjectMappingOperationDataSource.m:232
2013-01-30 13:07:42.487 uninkd[13722:907] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'RKManagedObjectMappingOperationDataSource must be initialized with a managed object context.'
Error if I take away the data source: 如果我拿走数据源会出错:
2013-01-30 13:27:32.601 uninkd[13754:907] *** Assertion failure in -[RKMappingOperation applyRelationshipMappings], /Users/holgersindbaek/Projects/Uninkd/Uninkd_IOS/Pods/RestKit/Code/ObjectMapping/RKMappingOperation.m:699
2013-01-30 13:27:32.603 uninkd[13754:907] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Cannot perform relationship mapping without a data source'
Hope you can help. 希望你能帮忙。
This is because RKManagedObjectMappingOperationDataSource
is expecting a managed object context, this is specifically for Core Data. 这是因为RKManagedObjectMappingOperationDataSource
期望一个托管对象上下文,这是专门针对Core Data的。 Are you using core data? 你在使用核心数据吗?
Forget everything I previously said and use: 忘记我之前说过和使用的一切:
#import "RKObjectMappingOperationDataSource.h"
RKObjectMappingOperationDataSource *mappingDS = [RKObjectMappingOperationDataSource new];
mapper.dataSource = mappingDS;
instead of: 代替:
RKManagedObjectMappingOperationDataSource *mappingDS = [RKManagedObjectMappingOperationDataSource new];
mapper.dataSource = mappingDS;
A hint, don't use any classes that say ManagedObject
if you're not using CoreData. 一个提示,不要使用该说什么类ManagedObject
,如果你不使用CoreData。 This is referring to a ManagedObject
in a ManagedObjectContext
which is unique to CoreData. 这是指一个ManagedObject
在ManagedObjectContext
这是唯一的CoreData。 That being said, core data + restkit is awesome and you should check it out. 话虽这么说,核心数据+ restkit很棒,你应该检查一下。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.