【问题标题】:Update attribute in Core Data [duplicate]更新核心数据中的属性[重复]
【发布时间】:2013-03-10 12:55:05
【问题描述】:

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

我有一个名为SchoolNames 的实体,它有一个名为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 数组中。但我不知道如何更新数组中的条目,然后将其保存回实体。

非常感谢任何帮助。

【问题讨论】:

    标签: core-data nsfetchrequest insert-update


    【解决方案1】:

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

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

    【讨论】:

    • 我也试过了,它有效 - 谢谢
    【解决方案2】:

    Martin 的建议确实有效。我投了赞成票;)。

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

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

    还要记得保存,相反更改只会在内存中(不在存储中)。

    附:在代码中,我假设nameOfSchool 的类型为NSString。其他值也是可能的。

    【讨论】:

    • 太棒了 - 非常感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-03
    • 2011-07-26
    相关资源
    最近更新 更多