2011-04-25 129 views
0

是否有类似于insertNewObjectForEntityName的方法来编辑当前在托管对象上下文中传递的实体?我不想创建另一个重复的实体。编辑核心数据中的实体

此外,我不希望用户能够输入具有相同属性(一个属性,事件标题)的两个实体。我怎样才能做到这一点,当他们尝试添加一个具有相同标题属性的新实体时,会弹出警告消息?

回答

1

你的第一个问题听起来像你想要做的就是获取一个已经存在于上下文中的获取请求的对象,改变对象的一些值,然后在你的上下文中调用-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”的类别实体。如果没有名称为“烹饪”的实体,则该数组将为空。

在实际执行提取请求之前,使用-countForFetchRequest:error:并检查非零计数的速度可能会更快,但我不确定它在小型iOS应用程序中的重要性。

+0

这正是我想要在这两种情况下做的。搜索上下文是否与获取请求相同?我似乎无法执行正确的提取请求,您是否有示例代码?在我看来,知道第1部分或第2部分可以解决我的问题,对吗? – Eric 2011-04-25 02:58:51

+0

好吧,我使用提取请求示例编辑了答案。 – 2011-04-25 04:10:09

+0

谢谢西蒙,我会调整这一点,如果需要回来的问题。 – Eric 2011-04-25 12:52:42