查找或创建NSManagedObject

时间:2015-01-06 11:48:26

标签: ios objective-c core-data magicalrecord

在我的一个NSManagedObject子类中,我想要findOrCreateByExternalId:inContext:类方法。除了保存上下文外,它确实很简单。在创建的情况下,可以有以下几种变体:

  1. 让调用者根据需要保存上下文;
  2. 同步保存上下文;
  3. 异步保存上下文。
  4. 最后一个(但并非最不重要的)变种:

    • create 中解析 find ,这样就强制调用者管理上下文。

    我认为第一个太糟糕了,因为调用者方面的开销太大而且第三个因为可能无法预测的结果而太糟糕了。

    同步保存似乎是最安全的方法,但我应该只保存新创建的对象而不是整个提供的上下文。

    现在我的解决方案是这样的(使用MagicalRecord):

    + (instancetype)findOrCreateWithExternalId:(NSString *)externId inContext:(NSManagedObjectContext *)context {
        XXObj *obj = [XXObj MR_findFirstByAttribute:@"externId" withValue:externId inContext:context];
        if (obj == nil) {
            __block XXObj *newObj = nil;
            [MagicalRecord saveWithBlockAndWait:^(NSManagedObjectContext *localContext) {
                newObj = [XXObj MR_createEntityInContext:context];
                newObj.externId = externId;
            }];
            obj = [newObj MR_inContext:context];
        }
        return obj;
    }
    

    这种做法是否合理安全?

0 个答案:

没有答案