2014-09-19 3 views
0

У меня есть свойство NSMutableOrderedSet с именем currentSongsList в подклассе NSObject. У меня есть свойство NSData с именем currentSongsList в подклассе NSManagedObject.Можно ли сохранить NSMutableOrderedSet в атрибут NSData в подклассе NSManagedObject?

Я хочу архивировать свойство NSMutableOrderedSet в базу данных, чтобы его можно было восстановить после завершения и перезагрузки моего приложения.

В CurrentSongsInfo.h -

@interface CurrentSongsInfo : NSObject 

@property (nonatomic, strong) NSMutableOrderedSet *currentSongsList; 

В CurrentSongsInfoArchive.h -

@interface CurrentSongsInfoArchive : NSManagedObject 

@property (nonatomic, retain) NSData * currentSongsList; 

В CurrentSongsInfoArchive.m -

DatabaseInterface *databaseInterfacePtr = [[DatabaseInterface alloc] init]; 
// Not showing code for databaseInterfacePtr:newManagedObjectOfType, but it has been working for over a year for many entity types 
CurrentSongsInfoArchive *currentSongsInfoArchive = (CurrentSongsInfoArchive *)[databaseInterfacePtr newManagedObjectOfType:@"CurrentSongsInfoArchive"]; 

NSData *currentSongsList = [NSKeyedArchiver archivedDataWithRootObject:currentSongsInfoArchive.currentSongsList]; 
currentSongsInfoArchive.currentSongsList = currentSongsList; 

При выполнении приведенного выше кода из CurrentSongsInfoArchive.m, Я вижу следующий результат:

currentSongsList.count = 540

2014-09-19 04: 30: 57,219 MusicByCarlCoreData [2863: 1091413] currentSongsInfoArchive.currentSongsList.length = 135

У меня есть четыре другие свойства NSMutableOrderedSet, чьи значения счетчика все другой. Но когда они заархивированы в объект CurrentSongsInfoArchive, их длина всегда равна 135.

NSMutableOrderedSet соответствует NSSecureCoding, но возможно ли сохранить NSMutableOrderedSet в атрибуте в подклассе NSManagedObject?

+0

Хмм, вы держите песни и в БД? Если вы не кодируете список, вы можете просто создать нормальные отношения между Song и PlayList и удерживать это как «orderedSet» – geo

+0

Песни находятся в БД, но в списках в объекте CurrentSongsInfo хранятся только теги inInternID как NSNumbers. Когда я пытался хранить списки в базе данных, производительность была ужасной. CurrentSongsList может содержать идентификаторы songInternalID для каждой песни в медиатеке пользователя iTunes. Я пытаюсь найти другой подход, который не включает в себя хранение всего списка, но все же позволяет NowPlayingViewController потенциально выбирать из каждой песни в базе данных. До сих пор я не понял, как это сделать. –

+0

Вы пытались сохранить эти NSMutableOrderedSets как NSMutableArray? Мне удалось сохранить массивы в атрибутах NSData и загрузить их обратно. http://stackoverflow.com/questions/25416132/how-do-you-store-data-from-nsmutable-array-in-core-data/25417855#25417855 – mitrenegade

ответ

0

Спасибо, @geo и @mitrenegade, за ваши предложения. К сожалению, это была глупая ошибка в моем коде архивации, которая вызвала проблему. Поскольку архивирование было плохим, не было ничего, что можно было бы разблокировать.

Итак, окончательный ответ ... Да можно сохранить NSMutableOrderedSet в атрибут NSData в подклассе NSManagedObject.

Смежные вопросы