【问题标题】: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 访问器的返回值声明为不可变的 对象,即使模型在内部使用可变对象。

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

【问题讨论】:

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

标签: iphone objective-c core-data


【解决方案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 只是一个示例,必须修改以供您使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多