核心数据:更新数组。
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 只是一个示例,必须修改以供您使用。
【讨论】:
以上是关于核心数据:更新数组。的主要内容,如果未能解决你的问题,请参考以下文章