核心数据:更新数组。

Posted

技术标签:

【中文标题】核心数据:更新数组。【英文标题】:Core Data : Updating array. 【发布时间】:2012-03-05 21:14:56 【问题描述】:

我有一个核心数据模型实体NoteObject,它有一个transformable 类型arrayOfTags。在NoteObject.h 文件中,它是NSManagedObject 的子类,arrayOfTags 声明为:

NSMutableArray *arrayOfTags;
@property (nonatomic, retain) NSMutableArray *arrayOfTags;
//.m
@dynamic arrayOfTags;

问题是对此数组所做的更改未保存。 Someone suggested以下为解决方案:

如果您使用的类有可变和不可变版本 表示一个属性——比如 NSArray 和 NSMutableArray——你应该 通常将 get 访问器的返回值声明为不可变的 对象,即使模型在内部使用可变对象。

但是我不确定这意味着什么。对于我的案例,我将如何遵循这些说明?

【问题讨论】:

你想如何改变数组中的数据? 通过添加。这是我最初提出的问题:***.com/questions/9556834/… 据我了解,您可以将 NSMutableArray 复制到 NSArray 中并返回 NSArray 以供使用。 你能告诉我它的样子吗? 【参考方案1】:

在此期间,即使你们中的每个人都找到了解决方法,试试这个:

[noteObject willChangeValueForKey:@"arrayOfTags"];

// make changes to noteObject.arrayOfTags

[noteObject didChangeValueForKey:@"arrayOfTags"];

【讨论】:

是的,这也确实有效。哪个更好,你的建议,还是 [noteObject setArrayOfTags:noteObject.arrayOfTags]? 是的,这个更好,我在我的项目中使用过。据我所知,我是从 Apple 示例代码中复制的。 (可能是书籍的例子,但无论如何都不确定)。编辑:它“更好”,因为它不依赖于其他条件。就像 Mac 上的绑定一样,只是告诉 Cocoa 发生了更改,请更新所有相关对象。【参考方案2】:

为 Core Data 实现访问器函数因您的关系模型而异。这个document 应该可以帮助您入门。您很可能会为您的 getter 使用此设置:

- (NSArray*)data

    [self willAccessValueForKey:@"data"];
    NSArray* array = [[NSArray alloc] initWithArray:arrayOfTags copyItems:YES];
    [self didAccessValueForKey:@"data"];
    return array;

请注意,上面的 sn-p 只是一个示例,必须修改以供您使用。

【讨论】:

以上是关于核心数据:更新数组。的主要内容,如果未能解决你的问题,请参考以下文章

核心数据 NSSet 返回空的对象数组

UItableview 不刷新核心数据中的更新数据

高效更新大量核心数据记录

将核心数据加载到数组中,然后填充表视图,重新排序数组对象不会持久

带有核心数据的 Cocoa 绑定不更新所有列

将对象插入核心数据实体时处理重复项