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

2024-01-10

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

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

-(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 http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSKeyedArchiver_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40003672

然后,您可以稍后使用 NSKeyedUnarchiver 将其从文件中读回。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

持久化 MPMediaItemCollection 对象的方法? (选自 iPod) 的相关文章

随机推荐

  • 鼠标悬停时的 WPF TextBlock 样式下划线

    简单的问题 下面的 WPF C 代码可以减轻一些重量吗 我的意思是 WTF 呃 我的意思是 WPF 来吧 你见过CSS吗 我只想在鼠标悬停时在文本下划线 就像链接一样 我真的需要为此添加 9 行吗
  • Zend DB 选择常量 - 表中不存在的列

    我正在尝试使用 Zend DB select 执行此查询 但我无法这样做 这是sql查询 select shopping id shopping details friend as type from shopping 请注意这里我如何指定
  • Monotouch 绑定无法接受委托模型

    我对 Applifier API 有以下绑定 namespace MonoTouch Applifier BaseType typeof NSObject interface Applifier Export initWithApplifi
  • 什么时候触发AJAX成功?

    我想通过 AJAX 加载一些 HTML 文档 但我想在加载该文档中的所有图像时显示它 about click function back load Tour html function back show 当 Tour html 中的所有图
  • Selenium Web 驱动程序从 jquery datepicker-Ui 中选择日期

    Selenium Web 驱动程序如何选择 jquery datepicker UI 日期到特定日期字段 1 我尝试使用Jscript设置日期 但是 必须从jquery弹出窗口中选择日期才能提交表单 请建议某种方法来自动选择日期并将所选值发
  • 防止 Visual Studio 作为设计器加载自定义分部类

    在 Visual Studio 中 有很多设计器编辑器 Windows 窗体 XAML 安装程序等 有时 我创建一个新的源代码部分类 自定义 来分离逻辑 例如 仅部分代码 Form1 类 Windows Forms Form Form1 c
  • 如何突出显示文件中后续行之间的差异?

    我对大型日志文件进行了很多紧急分析 通常这需要跟踪日志并查找更改 我渴望有一个解决方案能够突出这些变化 让眼睛更容易追踪 我研究过工具 但似乎没有任何东西可以满足我的需求 我已经用 Perl 编写了一些脚本 可以粗略地完成此操作 但我想要一
  • 根据给定的月份文本对列表进行排序

    如何对给定列表进行排序l根据月份 Jan Feb Mar and L K l Jan K Mar K Feb L 预期结果应该是 result Feb L Jan K Mar K 您的尝试是一个列表理解 实际上除了创建一个新列表之外什么也不
  • 表中不存在键列

    我在添加引用另一个表的外键字段时遇到问题 首先 我创建了用户表 如下所示 CREATE TABLE users user id INT 11 NOT NULL AUTO INCREMENT PRIMARY KEY userName VARC
  • 通过将鼠标悬停在散景中突出显示多个 hex_tiles

    我尝试在十六进制图中可视化我的数据 为此 我在图类中使用 python bokeh 和相应的 hex tile 函数 我的数据属于 8 个不同类别之一 每个类别都有不同的颜色 下图显示了当前的可视化效果 I would like to ad
  • Android:SD 卡有使用功能选项吗?

    谷歌推出的一些较新设备不包含 SD 卡 而且它们似乎正在朝这个方向发展 我的问题 有没有办法将 SD 卡声明为使用功能 以防止没有外部存储的人从 Google Play 查看 下载应用程序 我意识到这不是解决问题的正确方法 但在我可以重新编
  • 在 Eclipse IDE 中运行的 Java 程序的退出代码?

    我正在使用 Eclipse 开发一个 Java 程序 该程序应根据具体条件以不同的代码退出 if veryBadError Runtime getRuntime exit 10 else if notSoBadError Runtime g
  • 使用字符串名称功能创建变量

    我正在尝试生成一个函数来在数据框架上创建一堆具有相同命名约定并使用相同逻辑的列 不幸的是 我在创建变量时遇到了一些奇怪的行为 我希望其他人可以解释这里发生了什么 df lt data frame var1 c 1 2 3 var2 c 3
  • codeigniter 加密/解密函数返回空字符串

    我正在尝试使用 codeigniter 登录 但无法这样做 然后我尝试从数据库复制密码并将其传递给 dycription gt decode 函数 它返回空字符串 这是代码 var dump this gt encryption gt de
  • XML 节点的多个分组

    我正在尝试使用 muenchian 分组按目的地和分类值对下面的输入进行分组 这对我来说是新的 所以我不确定如何正确执行此操作 输入文件将比这大得多 因此性能很重要
  • NUnit.Mocks 文档在哪里? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 NUnit 的模拟库 NUnit Mocks 的文档在哪里 我在他们中找不到任何东西官方文档 http
  • 一次读取 1 个字节的二进制文件

    我试图一次读取一个 C 语言的二进制文件 在互联网上搜索了几个小时后 我仍然无法让它检索除垃圾和 或段错误之外的任何内容 基本上 二进制文件采用列表格式 长度为 256 个项目 每个项目为 1 个字节 0 到 255 之间的无符号整数 我正
  • 修改int为float(mysql)

    我正在尝试将 MySQL 中的数据类型从 INT 更改为 FLOAT 如下所示 ALTER TABLE user MODIFY rate float 5 NOT NULL 但当前数据已被删除 有什么方法可以使用 SQL 将数据从 INT 转
  • 如何从指令调用控制器函数?

    如何从指令调用控制器函数 或者如何从控制器访问指令 ng model 例如 我使用 Angular ui 引导时间组件 当时间改变时 我需要通知控制器中的调用函数 我认为总的来说 这是组件之间双向通信的典型用例 appControllers
  • 持久化 MPMediaItemCollection 对象的方法? (选自 iPod)

    我正在制作一个应用程序 用户可以在其中选择设置选项卡中的歌曲 并根据需要在不同的视图中播放该歌曲 我希望这样 如果用户要关闭应用程序并再次重新打开它 则可以存储该项目 我设法允许用户选择并存储一首歌曲 IBAction showMediaP