“尝试设置非属性列表对象......”带有自定义类的 NSMutableDictionary [重复]

2024-02-07

我有一个名为的自定义类ServerModule这是一个子类NSObject。我基本上存储了所有这些ServerModules 中包含一个键值对NSMutableDictionary。然后字典存储在NSUserDefaults。我了解到NSUserDefaults仅在访问对象时返回对象的不可变版本,因此我将字典初始化更改为:

_AllModules = [[NSMutableDictionary alloc]initWithDictionary:[_editServerModules objectForKey:@"AllModules"]]; //initialize a copy of AllModules dictionary

现在,我只是想存储一个自定义ServerModule该字典中的对象,并同步它。以下代码尝试执行此操作:

//Create new ServerModule
        ServerModule* newServer = [[ServerModule alloc]initWithUUID];
        newServer.name = self.tf_name.text;
        newServer.ip = self.tf_ip.text;
        newServer.port = self.tf_port.text;
        newServer.username = self.tf_user.text;
        newServer.password = self.tf_pass.text;
        //Add the ServerModule to AllModules dictionary with the key of its identifier
        [_AllModules setObject:newServer forKey:newServer.identifier];
        [self updateData];
        [_editServerModules synchronize];

标识符是一个字符串,在构造函数中设置ServerModule。这是代码updateData.

[_editServerModules setObject:_AllModules forKey:@"AllModules"];

如果您想知道,该对象位于@"AllModules"在AppDelegate中初始化如下:

NSMutableDictionary* AllModules = [[NSMutableDictionary alloc]init];

再次,这是我尝试保存某些内容时遇到的错误:

Attempt to set a non-property-list object {
    "42E9EEA0-9051-4E2A-81EA-DC8FC5639C26" = "<ServerModule: 0x8ac4e50>";
} as an NSUserDefaults value for key AllModules

谢谢你的帮助!

〜地毯嘶嘶声


您只能存储属性列表类型(数组、数据、字符串、数字、日期、字典)或 urlNSUserDefaults https://developer.apple.com/library/ios/documentation/cocoa/reference/foundation/Classes/NSUserDefaults_Class/Reference/Reference.html。这意味着所有内容(包括任何嵌套字典值)都必须是属性列表类型。你会想要实施NSCoding http://nshipster.com/nscoding/您的协议ServerModule对象,然后使用NSKeyedArchiver https://developer.apple.com/library/ios/documentation/cocoa/reference/foundation/Classes/NSKeyedArchiver_Class/Reference/Reference.html在存储数据之前对其进行序列化并且NSKeyedUnarchiver https://developer.apple.com/library/ios/documentation/cocoa/reference/foundation/Classes/NSKeyedUnarchiver_Class/Reference/Reference.html读回数据后缩小数据NSUserDefaults https://developer.apple.com/library/ios/documentation/cocoa/reference/foundation/Classes/NSUserDefaults_Class/Reference/Reference.html.

例如,假设您显示的属性存在于ServerModule对象,我会添加以下内容NSCoding https://developer.apple.com/library/ios/documentation/cocoa/reference/foundation/Protocols/NSCoding_Protocol/Reference/Reference.html协议方法到你的ServerModule执行:

#pragma mark - NSCoding support
-(void)encodeWithCoder:(NSCoder*)encoder {
    [encoder encodeObject:self.name forKey:@"name"];
    [encoder encodeObject:self.ip forKey:@"ip"];
    [encoder encodeObject:self.port forKey:@"port"];
    [encoder encodeObject:self.username forKey:@"username"];
    [encoder encodeObject:self.password forKey:@"password"];
}

-(id)initWithCoder:(NSCoder*)decoder {
    self.name = [decoder decodeObjectForKey:@"name"];
    self.ip = [decoder decodeObjectForKey:@"ip"];
    self.port = [decoder decodeObjectForKey:@"port"];
    self.username = [decoder decodeObjectForKey:@"username"];
    self.password = [decoder decodeObjectForKey:@"password"];
    return self;
}

当然,你需要序列化:

NSData* archivedServerModules = [NSKeyedArchiver archivedDataWithRootObject:_AllModules];
[_editServerModules setObject:archivedServerModules forKey:@"AllModules"];

并适当放气:

NSData* archivedServerModules = [_editServerModules objectForKey:@"AllModules"];
NSDictionary* serverModules = [NSKeyedUnarchiver unarchiveObjectWithData:archivedServerModules];

希望这能让您了解我在说什么。

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

“尝试设置非属性列表对象......”带有自定义类的 NSMutableDictionary [重复] 的相关文章

随机推荐

  • 如何让 Nock 和 Mocha 协同工作?

    我正在尝试使用 nock 来拦截 模拟我的应用程序中的一些 HTTP 流量以进行测试 我们的应用程序对我们的另一个网站进行身份验证 我需要 nock 来模拟 HTTP 200 带有 JSON 数据 和 HTTP 401 没有数据 来测试用户
  • dotnet core 方法“ValidateOptions”...没有实现

    我正在构建一个 NET Core 解决方案 该解决方案构建得很好 但是当我尝试发布它时 它崩溃并出现以下错误 Method ValidateOptions in type Microsoft CodeAnalysis CSharp CSha
  • Google Play Alpha 测试 - 无可用更新

    我已经有一段时间没有更新我的 Android 应用程序了 现在我想使用 Alpha 测试来运行应用内购买功能的一些测试 问题是 我不知道如何使用 Play 商店在我的设备上安装 Alpha 版本 我做了以下事情 创建APK于Android
  • 更改嵌套在克隆表中的输入/选择字段的名称属性以进行动态表单输入 - Javascript

    我正在设计一个动态输入表单 它本质上充当用户 GUI 用于在 mysql 数据库中创建表 JavaScript var counter 0 function moreFields counter var newFields document
  • 如何在Python中初始化二维数组?

    我已经得到了伪代码 for i 1 to 3 for j 1 to 3 board i j 0 next j next i 我如何在 python 中创建这个 想法是使用 for 循环创建一个 3 x 3 数组 并将所有元素设置为 0 如果
  • GeoPandas 和 OSMnx - 在地图上绘制

    我想在地图上绘制我的 Geopandas df 作为背景 我想要该地区的 道路 地图 喜欢 OSMnx 包 我试图弄清楚如何使用它的输出 shapefile 网络 作为我的情节背景 import osmnx as ox G ox core
  • Response.Redirect 与 Server.Transfer - 重定向作为“建议”

    所以我读了一篇article http www csharpfriends com Articles getArticle aspx articleID 15在 Response Redirect 上 与 Server Transfer 相
  • iOS Facebook 获取用户的电子邮件

    我尝试了 2000 多种方法来获取用户的电子邮件 我无法从 Facebook SDK 的图形 API 获取它 它不包含电子邮件属性 我还尝试手动将电子邮件属性添加到 FB 框架 但没有任何反应 是否可以下载第一个与 iOS 7 兼容的 FB
  • R中如何合并表?

    我想这会有一个简单的答案 但我无法解决 这是一个使用的示例iris数据集 a lt table iris 2 b lt table iris 3 如何将这两个表添加到一起 例如 在新输出表中 变量 3 的值为 27 26 1 变量 3 3
  • 在 Tomcat 中使用 Spring 通过 JMX 公开 Hibernate(缓存)统计信息

    收集 Hibernate Ehcache 统计信息并在基于 Spring 的设置中通过 JMX 公开它们似乎很容易 互联网有很多资源可以帮助您 例如http snippets dzone com posts show 11159 http
  • 在bash中重复打印一个字符[重复]

    这个问题在这里已经有答案了 有没有办法在 bash 中重复打印相同的字符 就像您可以使用此构造在 python 中执行此操作一样 print 3 gives 实际上有一个单行代码可以做到这一点 printf 0 s 1 10 prints
  • VB6 .frm 文件格式属性无故更改!

    我们 我们的公司 注意到 在从不同用户 机器将代码签入到我们的存储库之间 VB6 表单文件内的 Format 属性不断变化 即使我们没有在 PC 上更改任何内容 之前 格式 82182147 之后 格式 69337091 它给我们的源代码比
  • 数据帧子集性能

    我有几个大型数据帧 100 万行以上 x 6 10 列 需要重复进行子集化 子集部分是我的代码中最慢的部分 我很好奇是否有办法更快地做到这一点 load https dl dropbox com u 4131944 Temp DF IOST
  • Pascal 对象:如何进行类型化前向声明?

    我正在将很棒的 fmod C 标头翻译为 Pascal 但由于前向声明而陷入困境 如果我声明该函数before类型 错误为 FMOD CODEC STATE 未知 如果我声明 FMOD CODEC STATEbefore该函数 错误为 FM
  • 如何在 CherryPy 中执行异步后处理?

    Context 想象一下您有一个标准的 CherryPy hello word 应用程序 def index self return Hello world index exposed True 并且您想要进行一些后处理 即记录请求处理或仅
  • 如何从命令行在 Ubuntu Linux 上打开 AVD 管理器?

    如何从命令行在 Ubuntu Linux 上打开 AVD 管理器 对于那些来这里是因为android avd命令已被弃用 现在的操作方法如下 使用Android Studio 使用有效的 studio 项目打开 Android Studio
  • XMPP 使用哪个端口?

    我搜索过但没有找到 XMPP 使用哪些端口 我需要实现XMPP服务器和客户端并使用XML传输 文件传输和流媒体 他们使用不同的端口吗 有没有办法让它们都一样使用 这样我就不需要打扰网络管理员 谢谢 根据维基百科 http en wikipe
  • 意外标记:LIMIT

    当我将上述依赖项与 NamedQuery 一起使用时 我在错误部分收到错误提示 注意 请指教 是jar问题还是JBOSS问题 我在 Jboss 7 版本中使用 jdk1 7 运行此代码 使用 EntityManager 使用命名查询 Que
  • 编写优秀的 Twisted 网络资源

    我编写了第一个 Twisted 10 1 0 网络Resource我正在寻求反馈 因为我觉得这并不完全遵循最佳实践 并且可能包含新手错误 资源响应 url http www foo baz abc123并依赖于返回的服务dict 如果出现任
  • “尝试设置非属性列表对象......”带有自定义类的 NSMutableDictionary [重复]

    这个问题在这里已经有答案了 我有一个名为的自定义类ServerModule这是一个子类NSObject 我基本上存储了所有这些ServerModules 中包含一个键值对NSMutableDictionary 然后字典存储在NSUserDe