如何将MagicalRecord添加到已有的Core Data项目中?

4
我有一个Cocoa项目,已经处于开发的后期阶段。我使用Core Data和bindings。
最近我想测试一下MagicalRecord,因为它似乎可以帮助我最小化很多繁琐的CoreData代码,甚至不需要子类化实体。
使用cocoapods似乎是一个直截了当的实现方式。
问题:
在现有的CoreData项目中实现MagicalRecord是否是一个好主意?如果是,最好如何做?我主要考虑我的现有存储和代码。
谢谢。
1个回答

17

是的。Magical Record可以简化您的生活!在已经创建的项目中使用它们非常容易。

只需非常注意上下文。 MR会自动管理、创建和合并上下文。 当您开始使用它们时,任何与上下文相关的操作都应该通过Magical Record MR_方法来完成。


以下是配置Magical Record的主要步骤:

  1. 通过CocoaPods添加Magical Record:将以下行添加到Podfile文件中:pod 'MagicalRecord'
    (不要忘记运行pod install
  2. 在启动应用程序时设置managedObjectContext:

AppDelegate.m

    -(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        [MagicalRecord setupCoreDataStack];
        _managedObjectContext = [NSManagedObjectContext MR_defaultContext];
        //other your code
    }

当您想将JSON解析为实体时 - 编写此代码:

    [Item MR_importFromObject:JSONToImport];

MR_importFromObject 方法会自动创建新的实体或更新现有实体。

每个实体的特定 ID 是实体名称加上“ID”属性。 (例如,如果实体名为“Item”,则唯一属性名称将是“ItemID”),或者您可以指定名为“mappedKeyName”的特殊键,并设置您的唯一 ID。

3. 保存更改:

[_managedObjectContext MR_saveToPersistentStoreAndWait];

4. 获取数据:

NSArray items = [Item MR_findByAttribute:@"itemID" 
                               withValue:"SomeValue" 
                              andOrderBy:sortTerm 
                               ascending:YES 
                               inContext:[NSManagedObjectContext MR_defaultContext]];

5. 最后,在您的应用程序退出之前,您应该使用清理方法:

[MagicalRecord cleanUp];

关于多线程使用:

如果想在非主线程中使用上下文 - 你必须在每个线程中创建一个localContext

例如:

NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextWithParent:[NSManagedObjectContext MR_defaultContext]];
//do thing with localContext - fetch, import, etc.

这里有一个非常好的 MR 使用教程:cimgf:importing-data-made-easy


谢谢您的回答!那么 MR 不会干扰我的 Cocoa 绑定或其他任何东西吗? - Mikael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接