【问题标题】:Is it possible to save a NSMutableOrderedSet to a NSData attribute in a NSManagedObject subclass?是否可以将 NSMutableOrderedSet 保存到 NSManagedObject 子类中的 NSData 属性?
【发布时间】:2023-04-09 19:56:01
【问题描述】:

我在 NSObject 子类上有一个名为 currentSongsList 的 NSMutableOrderedSet 属性。 我在 NSManagedObject 子类上有一个名为 currentSongsList 的 NSData 属性。

我想将 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 子类中的属性中?

【问题讨论】:

  • hmm,你的歌曲也在数据库中吗?如果你没有加密列表,你可以在 Song 和 PlayList 之间创建一个正常的关系,并将其保存为“orderedSet”
  • 歌曲在数据库中,但 CurrentSongsInfo 对象中的列表仅将 songInternalID 保存为 NSNumber。当我试图将列表保存在数据库中时,性能很差。 currentSongsList 可以包含用户 iTunes 库中每首歌曲的 songInternalID。我试图找到一种不涉及存储整个列表的不同方法,但仍然允许 NowPlayingViewController 可能从数据库中的每首歌曲中进行选择。到目前为止,我还没有想出办法。
  • 您是否尝试过将那些 NSMutableOrderedSets 存储为 NSMutableArray?我已经设法将数组存储到 NSData 属性中并将它们加载回来。 stackoverflow.com/questions/25416132/…
  • 谢谢,mitrenegade,我试试看!

标签: ios core-data nskeyedarchiver nsmutableorderedset


【解决方案1】:

感谢@geo 和@mitrenegade 的建议。可悲的是,这是我的归档代码中的一个愚蠢的错误导致了这个问题。由于存档不好,所以没有什么可以取消存档的。

所以,最终答案...是的可以将 NSMutableOrderedSet 保存到 NSManagedObject 子类中的 NSData 属性。

【讨论】:

    猜你喜欢
    • 2011-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多