RestKit 2.0 删除 RKManagedObjectStore 但保留 NSManagedObjectModel
Posted
技术标签:
【中文标题】RestKit 2.0 删除 RKManagedObjectStore 但保留 NSManagedObjectModel【英文标题】:RestKit 2.0 Removing RKManagedObjectStore but keeping NSManagedObjectModel 【发布时间】:2013-12-17 08:26:52 【问题描述】:我设置了一个项目,其中来自服务器的所有数据都使用托管模型写入 Core Data 托管存储。我使用 mogenerator 从核心数据模型生成了所有实体。我将所有 RestKit 映射集成到我的实体中。
NSError *error = nil;
NSURL *modelURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"dataModel" ofType:@"momd"]];
// NOTE: Due to an ios 5 bug, the managed object model returned is immutable.
NSManagedObjectModel *managedObjectModel = [[[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL] mutableCopy];
RKManagedObjectStore *managedObjectStore = [[RKManagedObjectStore alloc] initWithManagedObjectModel:managedObjectModel];
// Initialize the Core Data stack
[managedObjectStore createPersistentStoreCoordinator];
NSPersistentStore __unused *persistentStore = [managedObjectStore addInMemoryPersistentStore:&error];
NSAssert(persistentStore, @"Failed to add persistent store: %@", error);
[managedObjectStore createManagedObjectContexts];
// Set the default store shared instance
[RKManagedObjectStore setDefaultStore:managedObjectStore];
现在由于时间限制,计划发生了变化。根本不应该存储数据。数据应从服务器读取并直接显示。没有保存,没有坚持。所以我想删除 RKManagedObjectStore,保留实体和映射,并在请求成功或 RKPaginator resutl 时从“RKMappingResult *mappingResult”读取数据。与 RKManagedObjectStore 和 RKPaginator 一起使用的示例:
[objectManager addResponseDescriptor:[RKResponseDescriptor responseDescriptorWithMapping:[Friend entityMapping:objectManager.managedObjectStore]
method:RKRequestMethodAny
pathPattern:nil
keyPath:@"items"
statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]];
[objectManager setPaginationMapping:[self paginationMapping]];
self.paginator = [objectManager paginatorWithPathPattern:@"data"];
self.paginator.perPage = 20;
//Set completion block for this paginator
[self.paginator setCompletionBlockWithSuccess:^(RKPaginator *paginator, NSArray *objects, NSUInteger page)
[weakSelf.dataArray addObjectsFromArray:objects];
failure:^(RKPaginator *paginator, NSError *error)
];
但是,当我开始移除 RKManagedObjectStore 时,我开始在映射时遇到问题。
'You must provide a managedObjectStore. Invoke mappingForClass:inManagedObjectStore: instead.'
Q.1 我可以在没有 RKManagedObjectStore 的情况下使用 Enitiy Mapping 吗?我的方向是否正确。
Q.2 我可以删除商店并保留模型吗?
任何提示、帮助或示例都会很好,以免我过多参与并走错方向。 谢谢艾尔
【问题讨论】:
【参考方案1】:您应该与需求变化作斗争,并使用 Core Data 作为信息的临时缓存来帮助进行内存管理(这样您就可以上下滚动列表而不必一直加载所有内容)。这不应该再花更多的时间来实现......
-
不,没有
RKManagedObjectStore
,您不能使用RKEntityMapping
。
您可以保留模型,但不能使用它(需要创建与 MOC 关联的托管对象)。
【讨论】:
感谢您的信息。我将暂时保留 MOC,并希望让它作为一个非常轻量级的版本运行。以上是关于RestKit 2.0 删除 RKManagedObjectStore 但保留 NSManagedObjectModel的主要内容,如果未能解决你的问题,请参考以下文章
有没有像 raywenderlich 这样的 Restkit 2.0 教程? [关闭]
RestKit 2.0 - 将 json 数组映射到实体关系会丢失数组序列