首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >持久化MPMediaItemCollection对象的方法?(选自iPod)

持久化MPMediaItemCollection对象的方法?(选自iPod)
EN

Stack Overflow用户
提问于 2011-11-23 18:31:51
回答 2查看 2K关注 0票数 6

我正在制作一个应用程序,用户可以在设置选项卡中选择一首歌曲,并根据需要在不同的视图中播放这首歌。我想要它,以便这个项目可以存储,如果用户要关闭应用程序,并重新打开它的另一次。

我已设法允许用户选择并存储一首歌曲:

代码语言:javascript
复制
-(IBAction)showMediaPicker:(id)sender{

    MPMediaPickerController *mediaPicker = [[MPMediaPickerController alloc] initWithMediaTypes: MPMediaTypeAny];

    mediaPicker.delegate = self;

    mediaPicker.allowsPickingMultipleItems = NO;

    mediaPicker.prompt = @"Select Alarm Sound";

    [self presentModalViewController:mediaPicker animated:YES];

}


- (void) mediaPicker: (MPMediaPickerController *) mediaPicker didPickMediaItems: (MPMediaItemCollection *) mediaItemCollection {

    [self dismissModalViewControllerAnimated: YES];

    settingsData.selectedSong = mediaItemCollection;//Object of type MPMediaItemCollection

但我希望用户每次使用该应用程序时都必须这样做。

我尝试过使用NSUserDefaults:

代码语言:javascript
复制
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:settingsData.selectedSong forKey:@"alarmSoundKey"];
[defaults synchronize];

但是得到错误:

* -NSUserDefaults setObject:forKey::尝试插入'MPMediaItemCollection‘类的非属性值“。注意,属性列表中的字典和数组还必须只包含属性值。

请问我有什么选择?不太确定该怎么对付这个..。

解决方案-

我还不能回答我自己的问题,所以我会把它放在这里:

我已经找到了自己的解决办法:

首先,将MPMediaItemCollection转换/编码为NSData对象,然后使用NSUserDefaults存储它:

代码语言:javascript
复制
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:mediaItemCollection];

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:data forKey:@"someKey"];
[defaults synchronize];

在那里,你可以在你的应用程序中的任何地方解码和使用.

代码语言:javascript
复制
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *data = [defaults objectForKey:@"someKey"];
MPMediaItemCollection *mediaItemCollection = [NSKeyedUnarchiver unarchiveObjectWithData:data]

希望这是对某人的帮助。传播消息,这件事还没有足够的报道。已经为这个问题做了大约4个小时了.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-23 22:13:47

只能在NSUserDefaults中存储属性列表值。由于MPMediaItemCollection符合NSCoding,所以可以使用NSKeyedArchiver来存储它。

http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSKeyedArchiver_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40003672

然后使用NSKeyedUnarchiver将其从文件中读取回来。

票数 4
EN

Stack Overflow用户

发布于 2012-07-17 19:32:53

还可以使用MPMediaItemPropertyPersistentID属性。您可以在应用程序下次启动时形成一个查询,从iPod库中检索该项,并优雅地处理一些事情,比如当用户决定从他们的库中删除歌曲时。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8247315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档