我正在執行核心數據輕量級遷移,將新屬性添加到現有對象。例如,假設我有歌曲和播放列表,兩者之間存在多對多關係(即,歌曲可以在多個播放列表中,並且播放列表包含多首歌曲)。核心數據遷移不會持久存在新屬性
我添加了一個新的核心數據模型版本,然後添加了一個名爲songCount
的新播放列表屬性。我手動添加的屬性,以我的模型類,然後推翻了CoreDataGeneratedAccessors添加新Song
到Playlist
像這樣:
@dynamic songCount;
- (void)addSongObject:(Song *)value
{
NSSet *changedObjects = [[NSSet alloc] initWithObjects:&value count:1];
[self willChangeValueForKey:@"songs"
withSetMutation:NSKeyValueUnionSetMutation
usingObjects:changedObjects];
[[self primitiveSongs] addObject:value];
[self didChangeValueForKey:@"songs"
withSetMutation:NSKeyValueUnionSetMutation
usingObjects:changedObjects];
// don't think the broadcasts are necessary when using the setter
[self willChangeValueForKey:@"songCount"];
self.songCount = @([[self primitiveSongs] count]);
[self didChangeValueForKey:@"songCount"];
}
這一切都正常工作。當我將一首歌曲添加到播放列表中,然後對播放列表進行核心數據獲取時,播放列表的正確值爲songCount
(我甚至可以按歌曲數進行獲取排序,這是整點)。
但是,當我重新啓動應用程序時,我所有播放列表的songCount
屬性爲nil
。我錯過了什麼?我做了一個[context save]
,播放列表確實包含了新的歌曲,但它並沒有保存歌曲數量。這不是一個瞬態屬性,並且persistentStoreCoordinator不會抱怨遷移。我不確定還有什麼可能會出錯,或在哪裏尋找調試。
請勿嘗試重寫生成的存取器並手動添加songCount。如果它仍然存在,你的覆蓋是錯誤的。 '[playlist addSongObject:song]; playlist.songCount = @(playlist.songCount.integerValue +1);' – Mundi