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 取消 - 使用它有啥隐藏的问题吗?

RestKit 2.0:映射-非唯一时的第二个实体为零

RestKit 2.0 - 将 json 数组映射到实体关系会丢失数组序列

如何通过 iOS 6 中的 RESTkit 2.0 将 JSON 中的 base64 图像导入核心数据二进制文件?

带有 RestKit 0.2.0 的嵌套字典