【问题标题】:Edit Entity in Core Data在 Core Data 中编辑实体
【发布时间】:2011-04-25 02:25:34
【问题描述】:

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

此外,我不希望用户能够输入具有相同属性(一个属性,事件标题)的两个实体。当他们尝试添加具有相同标题属性的新实体时,我该如何做到这一点?

【问题讨论】:

    标签: iphone core-data entity


    【解决方案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”的所有类别实体。如果没有名称为“Cooking”的实体,则数组将为空。

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

    【讨论】:

    • 这正是我想要在这两种情况下做的。搜索上下文是否与获取请求相同?我似乎无法执行正确的获取请求,您有示例代码吗?在我看来,知道第 1 部分或第 2 部分可以解决我的两个问题,对吗?
    • 谢谢 Simon,如果需要,我会对此进行调整并提出问题。
    • 我几乎不好意思问这个,但为什么这段代码不起作用?我得到一个指针整数转换错误: NSArray *categoryArray = [[self managedObjectContext] executeFetchRequest:categoryRequest error:&error]; NSUInteger arrayCount = [categoryArray 计数];返回数组计数;
    • 我认为我得到了这个工作:NSUInteger arrayCount = (NSUInteger)[categoryArray count];返回数组计数;
    猜你喜欢
    • 2020-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-29
    • 1970-01-01
    • 2021-11-16
    相关资源
    最近更新 更多