核心数据中的更新属性

时间:2013-03-10 12:55:05

标签: core-data nsfetchrequest insert-update

我知道这已被多次回答,但我似乎无法让我的工作。

我有一个名为SchoolName的实体,它有一个名为nameOfSchool的属性。我希望能够更新此属性。

NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"SchoolName"];
fetchRequest.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"NameOfSchool" ascending:YES]];
NSError *errorLoading = nil;
self.schoolNames = [context executeFetchRequest:fetchRequest error:&errorLoading];

NSLog(@"%d", self.schoolNames.count );

我可以在NSLog中看到我正在将数据加载到schoolNames数组中。但我不知道如何更新数组中的条目,然后将其保存回实体。

任何帮助都非常感激。

2 个答案:

答案 0 :(得分:2)

executeFetchRequest的返回值是 SchoolName 对象的数组。要更新这些对象,只需为属性指定一个新值:

for (SchoolName *sn in self.schoolNames) {
    sn.nameOfSchool = ... ; // new value;
}
NSError *error;
if (![context save:&error]) {
    // Save failed, handle error ...
}

答案 1 :(得分:1)

马丁的建议确实有效。我upvoted;)。

另一种方法是通过KVC访问您感兴趣的属性(如果您没有将实体SchoolName子类化)。

for (NSManagedObject *schoolObject in [self schoolNames]) {
    [schoolObject setValue:@"yourNewValue" forKey:@"nameOfSchool"];
}

还记得保存,相反,更改只会在内存上(不在商店中)。

P.S。在代码中,我认为nameOfSchool的类型为NSString。其他值也是可能的。