【问题标题】:RestKit with Core Data: Use NSPersistentStore with RestKit RKObjectManager带有核心数据的 RestKit:将 NSPersistentStore 与 RestKit RKObjectManager 一起使用
【发布时间】:2012-11-12 19:35:50
【问题描述】:

我正在使用带有核心数据的 RestKit。到目前为止,我将 RestKit 初始化如下:

[...]
RKObjectManager *objectManager = [RKObjectManager managerWithBaseURLString:@"http://URL"];
objectManager.objectStore = [RKManagedObjectStore objectStoreWithStoreFilename:@"database.sql"];
[...]

没有这个 xcode 自动生成的 Core Data 属性:

@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;
@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel;
@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;

通过在 NSManagedObject 中调用 objectsWithFetchRequest: 来获取数据。现在我想使用 NSFetchingResultsController,因此我至少需要这样一个 managedObjectContext。但是我从哪里得到这个 managedObjectContext 呢?我的第一个想法是:从 AppDelegate.m 中自动生成的 managedObjectContext,但这 3 个属性 managedObjectContext、managedObjectModel 和 persistentStoreCoordinator 都是相互依赖的。

如何正确地将 RestKit “链接”到 Core Data?如何将persistentStoreCoordinator“链接”到RestKit 和RKObjectManager?

【问题讨论】:

    标签: ios core-data restkit nspersistentstore


    【解决方案1】:

    您已经将 RestKit 和 Core Data 与该代码相关联。现在,如果我理解了这个问题,您只需要能够访问托管对象上下文。尝试创建一个“核心数据管理器”对象,其中包含具有这些属性的上下文、模型和存储协调器所需的所有代码。然后,任何需要该代码的类都可以从核心数据管理器继承。

    【讨论】:

    • “核心数据管理器”对象是什么意思?这是一个特定的类吗?我可能找到了我要找的东西: NSManagedObjectContext* context = [[RKObjectManager sharedManager].objectStore managedObjectContextForCurrentThread];获取 managedObjectContext。这是正确的吗?
    • 当我设置我的应用程序时,有一堆与自动生成的属性相关联的核心数据代码。我只是将该代码移动到自定义对象中,并在需要的地方重用它。但是,这也可能是您的解决方案
    【解决方案2】:

    http://mobile.tutsplus.com/tutorials/iphone/advanced-restkit-development_iphone-sdk/找到答案

    RKManagedObjectStore – 对象存储包装了内部核心数据类的初始化和配置,包括 NSManagedObjectModel、NSPersistentStoreCoordinator 和 NSManagedObjectContext。

    RestKit 处理“链接”到 Core Data 安静自主。没有链接要做。

    可以通过调用 fetchAllSortedBy 的 NSManagedObject 或 NSManagedObject+ActiveRecord.h 中的类似方法来获取 NSFetchingResultsController。例如

    fetchedResultsController = [Customer fetchAllSortedBy:@"surname" ascending:YES withPredicate:nil groupBy:@"surname"];
    

    【讨论】:

      猜你喜欢
      • 2011-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-01
      • 1970-01-01
      相关资源
      最近更新 更多