三个问题,但它们都是相关的。如果你愿意,我可以将它们分成三个问题,这样你就可以获得更多的学分。如果您愿意我这样做,请告诉我。
我有以下代码允许我访问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中检索该保存的对象并显示所有用户已保存的内容?代码示例请。
答案 0 :(得分:3)
要删除您只需要从letsMeet
删除NSManagedObjectContext
个对象。
NSError *error;
[managedObjectContext deleteObject:letsMeet];
[managedObjectContext save:&error];
由于您始终只有一个对象,因此获取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:]
时,唯一的事情就是对象的当前状态。