如何持久化MPMediaItemCollection对象? (从iPod中选择) [英] Way to persist MPMediaItemCollection objects? (selected from iPod)

查看:120
本文介绍了如何持久化MPMediaItemCollection对象? (从iPod中选择)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在创建一个应用程序,用户可以在设置选项卡中选择一首歌,并根据需要在不同的视图中播放。我想要它,以便在用户关闭应用程序并再次打开它时可以存储此项目。

I am making an app in which the user can select a song in a settings tab and have this played in a different view on demand. I want it so that this item can be stored if the user is to shut the app and reopen it another time.

我已设法允许用户选择和存储以下歌曲:

I have managed to allow the user to select and store a song in with:

-(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

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

but I want the user to have to do this every time they use the app.

我尝试过使用NSUserDefaults:

I have tried using NSUserDefaults:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:settingsData.selectedSong forKey:@"alarmSoundKey"];
[defaults synchronize];

但得到错误:

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

* -[NSUserDefaults setObject:forKey:]: Attempt to insert non-property value '' of class 'MPMediaItemCollection'. Note that dictionaries and arrays in property lists must also contain only property values.

请问有什么选择?不太确定如何解决这个问题...

What are my options please? Not really sure how to tackle this one...

解决方案 -

我无法自己回答问题所以我会把它放在这里:

I can't answer my own questions yet so I'll put it up here:

我已经找到了我自己的解决方案:

I HAVE FOUND MY OWN SOLUTION TO THIS:

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

First convert/encode the MPMediaItemCollection to an NSData Object and slam store it using NSUserDefaults using:

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:mediaItemCollection];

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

从那里,您可以解码并使用应用中的任何其他地方....

From there, you can decode and use anywhere else in your app....

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *data = [defaults objectForKey:@"someKey"];
MPMediaItemCollection *mediaItemCollection = [NSKeyedUnarchiver unarchiveObjectWithData:data]

希望对某人有所帮助。传播这个词,这还不够。实际上已经解决了这个问题大约4个小时...

Hope that is some help to someone. Spread the word, this hasn't been covered enough. Have literally been working on this problem for about 4 hours...

推荐答案

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

You can only store property list values in NSUserDefaults. Since MPMediaItemCollection conforms to NSCoding you could use an NSKeyedArchiver to store it instead.

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

然后使用NSKeyedUnarchiver来稍后将其从文件中读出来。

You then use NSKeyedUnarchiver to read it back out of the file later.

这篇关于如何持久化MPMediaItemCollection对象? (从iPod中选择)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆