我在写一个播放器软件,需要为歌曲添加标签。为此我创建了一个核心数据记录。让iOS音乐库和核心数据保持同步
如何让我的音乐库与iOS音乐库保持同步?到目前为止,我的方法是获取音乐库中的歌曲列表以及CoreData中的歌曲列表。然后使用字典并搜索uuid。如果存在,我将它从CoreData项目列表中删除。在此循环之后,我只需删除CoreData项目列表中剩下的所有内容。
这种方法的问题,由于某种原因,它崩溃与NSFastEnumerationMutationHandler这基本上意味着我试图访问一个数组中的对象在刚刚删除它之后的循环中。
- (void)updateMediaLibrary {
NSArray *mediaItems = [self getMediaItems];
NSMutableDictionary *coreDataItems = [self getCoreDataItems];
for (MPMediaItem *item in mediaItems) {
NSNumber *uuid = [item valueForProperty:MPMediaItemPropertyPersistentID];
Song *song = [coreDataItems valueForKey:[uuid stringValue]];
if (!song) {
[Song createSongFromMediaItem:item inContext:self.context];
}
else {
[coreDataItems removeObjectForKey:[uuid stringValue]];
}
}
for (Song *item in coreDataItems) {
[Song deleteSongWithUID:item.libKey inContext:self.threadContext];
}
}
我可能只是失明,但由于某种原因,我看不到我在这段代码中的错误。
您是否有其他/更好的建议,如何保持歌曲同步?
感谢您的帮助!
的第二个副本感谢您的优化。 :) – Jan 2014-09-19 16:07:58