NSManagedObject 保存或插入检查

Posted

技术标签:

【中文标题】NSManagedObject 保存或插入检查【英文标题】:NSManagedObject to save or insert check 【发布时间】:2014-04-03 12:08:23 【问题描述】:

我有一个UIViewController,它在UINavigationBar 中有保存按钮。

UIViewController 用于保存新用户以及编辑用户

打开,保存按钮,我以前总是调用 - (void)insertObject:(NSManagedObject *)object;,当我编辑用户时它会失败,因为该托管对象已经可用。

所以,我正在使用以下检查。这是插入或保存编辑用户的正确方法吗?

NSManagedObject *managedObject = someObject;
NSManagedObjectContext *managedContext = someContextObject;
NSError *error;
if(m.objectID.isTemporaryID)
//This means its a new object so, first insert
[managedContext insertObject:managedObject];


[managedContext save:&error];

【问题讨论】:

【参考方案1】:

我的模式是在视图控制器上为我的托管对象创建一个属性。假装你的用户类是User

@property (nonatomic, strong) User *user;

如果我正在编辑,属性将由现有用户设置。如果我正在创建它将是nil。在我的保存逻辑中,我进行了检查:

- (void)didSelectSaveButton:(id)sender 
    if (!self.user) 
        self.user = [NSEntityDescription insertNewObjectForEntityForName:@"User" 
                                                  inManagedObjectContext:context];
    

    //  Rest of the logic to map the UI elements to the properties of my user model
    //  objects, referencing self.user

    NSError *error = nil;
    BOOL success = [managedObjectContext save:&error];

    // error handling

这样,我为用户填充信息的逻辑是相同的,无论是“插入”还是“更新”。

【讨论】:

以上是关于NSManagedObject 保存或插入检查的主要内容,如果未能解决你的问题,请参考以下文章

插入的 NSManagedObject 无法保存时会发生啥情况?

已插入但尚未保存的 NSManagedObject?

核心数据:NSManagedObject 何时插入上下文并保存?

将 NSManagedObject 重新插入到 ManagedObjectContext

保存对 NSManagedObject 的更改

避免获取已删除的 NSManagedObject