RKObjectMapping和RKEntityMapping之间的关系
说我有这样的JSON
:
{ "hits": 4056, "books": [ { "name": "Book 1" }, { "name": "Book 2" }, { "name": "Book 3" } ] }
我想将这个响应映射到BooksResponse
对象:
@interface BooksResponse @property (nonatomic, assign) NSInteger hits; @property (nonatomic, strong) NSArray* books; @end
其中books属性是CoreData
Book对象的数组。 我正在使用RKObjectEntity
来映射BooksResponse
如下所示:
RKObjectMapping* booksResponseMapping = [RKObjectMapping mappingForClass:[BooksResponse class]]; [booksResponseMapping addAttributeMappingsFromDictionary:@{ @"hits" : @"hits" }]; [booksResponseMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"books" toKeyPath:@"books" withMapping:[self booksMapping]]];
而booksMapping是这样实现的:
RKEntityMapping* bookMapping = [RKEntityMapping mappingForEntityForName:@"Book" inManagedObjectStore:[self managedObjectStore]]; [bookMapping addAttributeMappingsFromDictionary:@{ @"name" : @"name" }];
但每当RestKit
尝试执行映射时都会发生崩溃:
CoreData: error: Failed to call designated initializer on NSManagedObject class 'Book'
我检查,在执行过程中, RKObjectManager
实例上存在RKObjectManager
。 应用程序在类RKMappingOperation:355
上挂起
id currentValue = [self.destinationObject valueForKeyPath:keyPath];
有没有办法可以使简单的objectivec对象和NSManagedObject
之间的关系,以便只有部分的JSON
响应持久在CoreData
?
这是RKObjectRequestOperation
和RKManagedObjectRequestOperation
。 因为你只有1个响应描述符,并且它匹配一个对象(不是托pipe对象),所以RestKit将使用RKObjectRequestOperation
。 当它这样做时,托pipe对象库在映射期间不可用,因此不能创build托pipe对象。
解决方法:
而不是使用1响应描述符,使用2.第一个只创buildBooksResponse
并映射hits
。 第二个创buildBook
并映射name
。
一旦操作完成,您将获得一个映射响应,其字典包含2个键:null和“books”。 null键保存BooksResponse
实例,“books”键保存Book
实例。 您现在可以更新BooksResponse
实例来填充关系。
请注意,映射响应中的键对应于2个响应描述符上指定的键path。
- 决定使用核心数据还是NSUserDefaults
- 使用UITableView和NSOrderedSet核心数据sorting
- CoreData:注释:无法在Xcode 9 GM的path上加载优化模型
- 从iCloud中删除核心数据失败
- UIManagedDocument NSFetchedResultsController和背景上下文
- 完整CoreData上传(备份)到iCloud驱动器,并在需要时进行恢复
- 核心数据,当NSFetchRequest返回NSDictionaryResultType时如何获取NSManagedObject的ObjectId?
- 核心数据NSManagedObject – 跟踪属性是否改变
- coredata ios8崩溃