ios - 如何更新核心数据?

标签 ios core-data persistence

我看到很多关于 Core Data 更新的问题。实际上我正在创建一个简单的应用程序联系人列表应用程序。它包含添加、编辑、删除和更新功能。这是我的更新代码。它可以工作并更新,但它会更新所有联系人列表。我只需要更新特定联系人。

- (IBAction)updatePressed:(id)sender 
{
    delegate = [[AppDelegate alloc]init];
    delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    name2 = emailtxt1.text;
    email2 = nametext1.text;
    mobile2 = numbertxt1.text;
    dict = [[NSMutableDictionary alloc] init];
    [dict setObject:nametext1.text forKey:@"NAME"];
    [dict setObject:emailtxt1.text forKey:@"EMAIL"];
    [dict setObject:numbertxt1.text forKey:@"MOBILE"];
    [delegate UpdateDiary:dict];
}

- (void)UpdateDiary:(NSMutableDictionary *)dictionary
{
    NSLog(@"update book Details Function Entered");

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Diary"inManagedObjectContext:self.managedObjectContext];
    [fetchRequest setEntity:entity];

    NSArray *mutableFetchResult = [[[self.managedObjectContext executeFetchRequest:fetchRequest error:&error] mutableCopy] autorelease];

    if (mutableFetchResult == nil) {
        NSLog(@"Fetch result error %@, %@", error, [error userInfo]);
    }

    for (Diary *ob2 in mutableFetchResult) 
    {
        {
        ob2.name = [dictionary objectForKey:@"NAME"];
        ob2.email=[dictionary objectForKey:@"EMAIL"];
        ob2.phone=[dictionary objectForKey:@"MOBILE"];
        }
    }

    if(![self.managedObjectContext save:&error])
    {               
        if([error localizedDescription] != nil)
        {           
        NSLog(@"%@",error);
        }
        else
        {

        }
    }
}

最佳答案

您需要为获取请求设置谓词。这就是它知道您想要哪个对象而不是全部获取它们的方式。

你可以这样做:

fetchRequest.predicate = [NSPredicate predicateWithFormat:@"email == %@", anEmailAddress];

如果您这样做,那么执行提取请求的结果将只是与您在谓词中设置的电子邮件地址相匹配的对象。

当然请注意,如果有多个对象具有相同的电子邮件地址,那么提取请求将提取所有对象。

您的应用程序的更好设计可能是,当您进入编辑表单时,保留您正在编辑的核心数据对象,可能在您的 View Controller 的属性中。 (我想你会在那个时候得到它,因为你需要知道用什么填充字段。)这样你就不需要在用户尝试提交编辑时执行提取— 你可以只使用你一直在身边的东西。

关于ios - 如何更新核心数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11881879/

相关文章:

ios - swift : "mapView.showUserLocation = true"返回 "fatal error: unexpectedly found nil while unwrapping an Optional value (lldb) "

ios - MonoTouch.Dialog - 如何从元素 UI 中获取值

ios - 查询核心数据中的最大NSDate

objective-c - 释放对象添加到核心数据?

ios - 我从 NSString 的 'componentsSeparatedByString' 方法得到了奇怪的输出

Java Hibernate EntityManager 同步

ios - 添加 View 、删除 View 并再次添加 View 会破坏自动布局约束

ios - subview 在运行时调整大小 - XCode 4.5.1 iOS

ios - 在 TableView 部分中排序核心数据对象

java - 部署 JPA 实体时出错 - SQL 语法错误代码 1064