gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 03:52:59 24 4
gpt4 key购买 nike

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

我已经设法允许用户选择歌曲并将其存储在:

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

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

但出现错误:

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

请问我有哪些选择?不太确定如何解决这个问题......

解决方案 -

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

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

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

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:mediaItemCollection];

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

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

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

希望对某些人有所帮助。广而告之,这还不够涵盖。确实已经在这个问题上工作了大约 4 个小时......

最佳答案

您只能在 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 稍后从文件中读回它。

关于iphone - 持久化 MPMediaItemCollection 对象的方法? (选自 iPod),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8247315/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com