2012-03-05 82 views
0

我有一個核心數據模型實體NoteObject,它有一個transformable類型arrayOfTags。在NoteObject.h文件,該文件是NSManagedObject亞類中,arrayOfTags聲明爲:核心數據:更新數組。

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

的問題是,那些對這個數組的更改不會被保存。 Someone suggested以下的解決方案:

如果有您使用 一類的可變和不可變版本表示屬性,如NSArray的和NSMutableArray裏,你應該 通常聲明的get訪問返回值即使內部模型使用可變對象,也是不可變的 對象。

但是我不完全確定這意味着什麼。我將如何按照我的情況下的這些說明?

+0

你如何改變數組中的數據? – Seb 2012-03-05 21:21:15

+0

通過對其添加。這是我問的原始問題:http://stackoverflow.com/questions/9556834/making-changes-to-core-data-fetched-array – Snowman 2012-03-05 21:22:42

+0

從我的理解是,你會複製NSMutableArray到一個NSArray和返回NSArray以供使用。 – Seb 2012-03-05 21:25:06

回答

1

即使你已經找到了在此期間解決方法試試這個:

[noteObject willChangeValueForKey:@"arrayOfTags"]; 

// make changes to noteObject.arrayOfTags 

[noteObject didChangeValueForKey:@"arrayOfTags"]; 
+0

是的,這實際上也起作用。哪個更好,你的建議還是[noteObject setArrayOfTags:noteObject.arrayOfTags]? – Snowman 2012-03-05 21:41:38

+0

是的這一個更好,我用在我的項目。據我記得我已經從蘋果示例代碼複製。 (可能是書籍的例子,但無法確定)。編輯:「更好」,因爲它不依賴於其他條件。它與Mac上的綁定一樣,只是告訴Cocoa已做出更改,請更新所有相關對象。 – 2012-03-05 22:14:35

1

實現對核心數據訪問功能,與你的關係模型而異。這document應該幫助你開始。最有可能你會使用這個設置爲你消氣:

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

請注意,上面的代碼僅僅是一個例子,將不得不被修改爲您的使用。