保存和删除NSManagedObject&的NSManagedObjectContext

时间:2013-02-28 01:14:34

标签: ios core-data fetch save nsfetchrequest

三个问题,但它们都是相关的。如果你愿意,我可以将它们分成三个问题,这样你就可以获得更多的学分。如果您愿意我这样做,请告诉我。

我有以下代码允许我访问NSManagedObject

self.managedObjectContext = [(STAppDelegate *)[[UIApplication sharedApplication]  delegate] managedObjectContext];

NSError *error;
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"LetsMeet" inManagedObjectContext:managedObjectContext]];
NSArray *objectArray = [managedObjectContext executeFetchRequest:request error:&error];
if(objectArray.count==0){
    letsMeet = (LetsMeet *) [NSEntityDescription insertNewObjectForEntityForName:@"LetsMeet" inManagedObjectContext:managedObjectContext];
    } else{
    letsMeet = (LetsMeet *)[objectArray objectAtIndex:0];
    }

上面的代码允许我保存和检索属性。即我可以访问letsMeet.attribute来保存和获取。

问题1:如何删除和启动全新的managedObjectContext。即用户有一张他在场景之间填写的表格。当用户点击导航控制器上的“下一步”按钮时,所有内容都会从每个场景保存到CoreData。经过几个屏幕后,用户想要取消表格。此时我想删除到目前为止已保存的所有内容。代码示例请。

问题2:让我们说用户走向表单的末尾并决定保存表单以便以后检索。如何将整个表单的副本保存为Core Data中的一个对象。代码示例请。

问题3:如何在以后从Core Data中检索该保存的对象并显示所有用户已保存的内容?代码示例请。

1 个答案:

答案 0 :(得分:3)

  1. 要删除您只需要从letsMeet删除NSManagedObjectContext个对象。

    NSError *error;
    [managedObjectContext deleteObject:letsMeet];
    [managedObjectContext save:&error];

  2. 由于您始终只有一个对象,因此获取letsMeet的引用不是问题。您可以像在代码中那样进行操作 的更新 而且您不需要删除托管对象上下文。它只是一个处理对象的空间。问题末尾有更多解释。

    2.如果LetsMeet实体的建模方式是所有表单元素都是LetsMeet的属性,则在创建managedObjectContext对象后保存LetsMeet在代码中完成,它将保存为单个对象。

    3.您已经知道如何检索对象,就像您在代码中所做的那样。只使用一个对象,一切都变得简单。 在多个对象获取唯一对象的情况下,您应该实现主键(可能是formID,即;将另一个属性添加到LetsMeet),或者您应该知道每个对象的objectId是什么,然后相应地设置获取请求的谓词。

    NSFetchRequest *request = [[NSFetchRequest alloc]init];
    [request setEntity:letsMeet];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"formId like %@", formId];
    [request setPredicate:predicate];
    
    NSArray *resultsArray =[managedObjectContext executeFetchRequest:request error:&error];
    

    如果你的formId是唯一的,那么这将返回一个对象数组。

    但是如果你使用核心数据只处理一个对象,你可以使用NSUserDefaults或写入plist文件来执行此操作。这有点矫枉过正。

    <强>更新 获取NSManagedObject的objectId:

     [letsMeet objectId];
    

    ManagedObjectContext就像一块白板。数组中的对象,托管对象上下文中的对象,它们都是一样的。您可以更改对象,添加对象,删除对象等。当您执行写入磁盘的[managedObjectContext save:]时,唯一的事情就是对象的当前状态。