以编程方式更新coredata中的重复值?

时间:2012-09-06 06:13:59

标签: ios xcode core-data

我是Core Data的新手。我想更新重复值。例如,我的表看起来像这样

 id | Name
============
 1  | Joseph  
 2  | Fernandez  
 3  | Joseph
 4  | James

假设我想将对应于id 1和4的Joseph更新为“myName”。当我尝试更新它时,它只更新第4行。我在任何文档中都找不到任何方法。有谁能建议我解决方案?

还有一个问题,如何打印所有名称值?

3 个答案:

答案 0 :(得分:2)

您必须阅读文档以了解如何更新记录 http://www.appcoda.com/core-data-tutorial-update-delete/

答案 1 :(得分:1)

詹姆斯

我会尝试用示例代码回答您的问题。

要更新需要使用谓词设置新NSFetchRequest的特定对象,请抓取对象(类型为NSManagedObject),更新您感兴趣的值并保存上下文。

所以,例如:

NSFetchRequest* fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"YourEntityName"];
// set the predicate (it's equal to set a WHERE SQL clause) filtering on the name for example
// use camel case notation if possible, so instead of Name use name (for this you have to changes your model, if you don't want to do it use Name)
[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"name == %@", @"Joseph"]];

NSError* error = nil;
NSArray* results = [context executeFetchRequest:fetchRequest error:&error];
// do some error checking here...
for (NSManagedObject resultItem in results) {

    // use KVC (for example) to access your object properties
    [resultItem setValue:@"myName" forKey:@"name"];
}

// save your context here
// if you don't save, changes are not stored

要打印,您需要设置新的NSFetchRequest,抓住对象(NSManagedObject类型)并使用NSLog

例如:

NSFetchRequest* fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"YourEntityName"];

NSError* error = nil;
NSArray* results = [context executeFetchRequest:fetchRequest error:&error];
// do some error checking here...
for (NSManagedObject resultItem in results) {

    NSLog(@"%@", [resultItem valueForKey:@"name"]);
}

P.S。我提供的代码非常简单,我用于特定值的谓词检查name。由于这可能容易出错,我会修改模型并为你需要使用的每个对象使用一种guid(我不知道id是否适用于此但我会将其名称更改为另一个,例如userId)。完成后,您可以检查它。

希望有所帮助。

答案 2 :(得分:0)

就像检索NSManagedObject并更改Name属性一样简单。您可以使用获取请求检索NSManagedObject。一旦您更改了该属性,即使关闭该应用程序也希望保持更改状态,您必须在save上执行managedObjectContext

您必须阅读文档才能快速了解核心数据: http://developer.apple.com/library/mac/#documentation/cocoa/Conceptual/CoreData/Articles/cdBasics.html#//apple_ref/doc/uid/TP40001650-TP1

编辑:只需NSLog您想知道的任何内容,例如记录您获取请求结果。