【发布时间】:2011-04-25 02:25:34
【问题描述】:
是否有类似于 insertNewObjectForEntityName 的方法来编辑在托管对象上下文中传递的当前实体?我不想创建另一个重复的实体。
此外,我不希望用户能够输入具有相同属性(一个属性,事件标题)的两个实体。当他们尝试添加具有相同标题属性的新实体时,我该如何做到这一点?
【问题讨论】:
是否有类似于 insertNewObjectForEntityName 的方法来编辑在托管对象上下文中传递的当前实体?我不想创建另一个重复的实体。
此外,我不希望用户能够输入具有相同属性(一个属性,事件标题)的两个实体。当他们尝试添加具有相同标题属性的新实体时,我该如何做到这一点?
【问题讨论】:
您的第一个问题听起来您想要做的是通过获取请求获取一个已经在上下文中的对象,更改对象上的一些值,然后在您的上下文中调用 -save 方法。
对于第二部分,您要做的是当用户尝试添加一个项目时,在上下文中搜索具有相同标题的对象,如果该项目存在,则弹出警报。
编辑:这是我的应用程序中的一些代码(稍作编辑),我在其中设置并执行了一个获取请求:
NSFetchRequest *categoryRequest = [[NSFetchRequest alloc] init];
[categoryRequest setEntity:[NSEntityDescription entityForName:@"Category" inManagedObjectContext:[self managedObjectContext]]];
NSString *categoryName = @"Cooking";
NSPredicate *categoryNameMatchesPredicate = [NSPredicate predicateWithFormat:@"name MATCHES %@", categoryName];
[categoryRequest setPredicate:categoryNameMatchesPredicate];
NSError *error = nil;
NSArray *categoryArray = [[self managedObjectContext] executeFetchRequest:categoryRequest error:&error];
在此请求之后,数组 categoryArray 包含名称为“Cooking”的所有类别实体。如果没有名称为“Cooking”的实体,则数组将为空。
在实际执行 fetch 请求之前使用 -countForFetchRequest:error: 并检查非零计数可能更快,但我不确定它在小型 iOS 应用程序中是否重要。
【讨论】: