三个问题,但它们都是相关的。如果您愿意,我可以将它们分为三个问题,以便您获得更多学分。如果您愿意我这样做,请告诉我。
我有以下代码允许我访问 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];
}
上面的代码允许我保存和检索属性。即我可以访问 letMeet.attribute 来保存和获取。
问题 1:如何删除并启动一个全新的 ManagedObjectContext。即用户有一个他在场景之间填写的表格。当用户点击导航控制器上的“下一步”按钮时,每个场景的所有内容都会保存到 CoreData 中。经过几个屏幕后,用户想要取消表单。此时我想删除迄今为止保存的所有内容。请代码示例。
问题 2:假设用户即将读完表单并决定保存表单以供以后检索。如何将整个表单的副本保存为 Core Data 中的一个对象。请代码示例。
问题 3:稍后如何从 Core Data 中检索已保存的对象并显示所有用户已保存的内容?请代码示例。
-
要删除你只需要删除letsMeet
对象来自NSManagedObjectContext
.
NSError *error;
[managedObjectContext deleteObject:letsMeet];
[managedObjectContext save:&error];
由于您始终只有一个对象,因此获取letsMeet
不是问题。您可以按照您在代码中所做的那样进行操作。
Update:并且您不需要删除托管对象上下文。它只是一个处理你的物品的空间。问题末尾有更多解释。
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 是唯一的,这将返回一个对象数组。
但是,如果您使用 core-data 仅处理一个对象,则可以使用NSUserDefaults
或写入 plist 文件来执行此操作。这有点矫枉过正了。
Update:获取 NSManagedObject 的 objectId:
[letsMeet objectId];
ManagedObjectContext 就像一个白板。数组内的对象、托管对象上下文内的对象,它们都是一样的。您可以更改对象、添加对象、删除对象等。唯一的事情是当您执行以下操作时对象的当前状态是什么[managedObjectContext save:]
,即写入磁盘。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)