尝试将非属性列表对象设置为 NSUserDefaults

2023-12-27

我以为我知道是什么导致了这个错误,但我似乎无法弄清楚我做错了什么。

这是我收到的完整错误消息:



Attempt to set a non-property-list object (
   "<BC_Person: 0x8f3c140>"
) as an NSUserDefaults value for key personDataArray
  

我有一个Person我认为符合的类NSCoding协议,我的 person 类中有这两种方法:

- (void)encodeWithCoder:(NSCoder *)coder {
    [coder encodeObject:self.personsName forKey:@"BCPersonsName"];
    [coder encodeObject:self.personsBills forKey:@"BCPersonsBillsArray"];
}

- (id)initWithCoder:(NSCoder *)coder {
    self = [super init];
    if (self) {
        self.personsName = [coder decodeObjectForKey:@"BCPersonsName"];
        self.personsBills = [coder decodeObjectForKey:@"BCPersonsBillsArray"];
    }
    return self;
}

在应用程序中的某个时刻,NSString in the BC_PersonClass已设置,并且我有一个DataSave我认为正在处理我的属性编码的类BC_PersonClass。 这是我正在使用的代码DataSave class:

- (void)savePersonArrayData:(BC_Person *)personObject
{
   // NSLog(@"name of the person %@", personObject.personsName);

    [mutableDataArray addObject:personObject];

    // set the temp array to the mutableData array
    tempMuteArray = [NSMutableArray arrayWithArray:mutableDataArray];

    // save the person object as nsData
    NSData *personEncodedObject = [NSKeyedArchiver archivedDataWithRootObject:personObject];

    // first add the person object to the mutable array
    [tempMuteArray addObject:personEncodedObject];

    // NSLog(@"Objects in the array %lu", (unsigned long)mutableDataArray.count);

    // now we set that data array to the mutable array for saving
    dataArray = [[NSArray alloc] initWithArray:mutableDataArray];
    //dataArray = [NSArray arrayWithArray:mutableDataArray];

    // save the object to NS User Defaults
    NSUserDefaults *userData = [NSUserDefaults standardUserDefaults];
    [userData setObject:dataArray forKey:@"personDataArray"];
    [userData synchronize];
}

我希望这些代码足以让您了解我正在尝试做什么。 我再次知道我的问题在于我如何在 BC_Person 类中编码我的属性,我似乎无法弄清楚我做错了什么。

谢谢您的帮助!


您发布的代码尝试将自定义对象数组保存到NSUserDefaults。你不能那样做。实施NSCoding方法没有帮助。你只能存储类似的东西NSArray, NSDictionary, NSString, NSData, NSNumber, and NSDate in NSUserDefaults.

您需要将对象转换为NSData(就像你在一些代码中一样)并存储它NSData in NSUserDefaults。您甚至可以存储NSArray of NSData如果你需要。

当您读回数组时,您需要取消归档NSData拿回你的BC_Person对象。

也许你想要这个:

- (void)savePersonArrayData:(BC_Person *)personObject {
    [mutableDataArray addObject:personObject];

    NSMutableArray *archiveArray = [NSMutableArray arrayWithCapacity:mutableDataArray.count];
    for (BC_Person *personObject in mutableDataArray) { 
        NSData *personEncodedObject = [NSKeyedArchiver archivedDataWithRootObject:personObject];
        [archiveArray addObject:personEncodedObject];
    }

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

尝试将非属性列表对象设置为 NSUserDefaults 的相关文章

  • SplitViewController 与 TabbarController

    我在我的应用程序中使用分割视图功能 我必须将选项卡栏放在 rootViewController 中 但是 当我在选项卡栏中添加控制器并将它们添加到分割视图中时 它不会分割 它只显示detailViewController 这是应用程序中完成
  • 由于无法确认开发者身份而无法打开

    我在 Mac OSX 中开发了一个应用程序和守护进程 并且我已经在 xcode 中与开发者 ID 签署了应用程序和守护进程源代码 在守护进程中 我已经对每个框架进行了签名并打包 并且我使用软件包安装程序对所有框架进行了 pkg 现在我的应用
  • 创建宏来执行默认初始化

    我有很多重复这个简单样板的方法 id myObject if myObject self myObject myObject class new return myObject 所以我想用一个简单的宏来替换它 define default
  • 使用 UINavigationController 从右向左推送 ViewController

    大家都知道UINavigationController从左到右推送ViewController 有没有办法从右到左推送View 就像后退按钮的动画一样 现在我有这个 self navigationController pushViewCon
  • 如果您查看内部,nib 文件到底是什么样子的?

    我刚刚学习 nibs 和 swift 并对某些东西感到好奇 我知道 如果您有一个 main storyboard 文件 则首先加载根视图控制器的笔尖 然后加载该视图控制器下可能分层存在的任何视图 但是 我想知道一些事情 当他们说笔尖已 加载
  • 当点击 UITableViewCell 的子视图时引发选择事件 (didSelectRowAtIndexPath)

    我创建了一个自定义 UITableViewCell 其中包含许多子视图 在大多数情况下 我希望 UITableViewCell 的控制器来处理事件 在一种情况下 我希望子视图简单地将事件传递给父 UITableViewCell 这将导致它在
  • 快速找到一个数字的下一个倍数的方法

    我需要找到从基数开始的数字的第一个倍数 例如 7 中 3 的第一个倍数是 9 我的第一次尝试是这样做 multiple baseNumber while multiple number 0 multiple 最后 multiple 将具有第
  • just_audio 无法在 ios flutter 上工作未处理的异常:(-11800)操作无法完成

    我正在尝试从它自己的存储库运行 just audio 示例项目https github com ryanheise just audio tree master just audio example https github com rya
  • 从 NSString 的第一行删除换行符

    我怎样才能删除第一个 nNSString 中的字符 编辑 只是为了澄清一下 我想做的是 如果字符串的第一行包含 n 字符 请将其删除 否则不执行任何操作 即 如果字符串是这样的 nhello this is the first line n
  • UIAlertView 中的 MPVolumeView?

    是否可以将 MPVolumeView 放入 UIAlertView 中 我已经尝试过put它在里面 但不显示 这可能是sizeToFit or initWithFrame 部分 有没有办法测试是否MPVolumeView实际上正在被创建吗
  • 处理 NSPropertyListSerialization 中的 CFNull 对象

    在我的应用程序中 我尝试序列化服务器响应字典并将其写入文件系统 但对于某些响应 我收到错误 属性列表格式无效 原因是服务器响应中的 CFNull 对象 现在 服务器响应将不断变化 因此我没有明确的方法来删除 CFNull 对象 下面是我的代
  • 未安装的应用程序的URL方案

    简单的问题 我正在开发一个将注册自己的 URL 方案的应用程序 我计划通过人们最喜欢的 QRCode 阅读器使用 QRCode 启动该应用程序 我的问题 如果我的应用程序尚未安装在他们的 iPhone iPad 上 会发生什么 他们会被引导
  • StoryBoard 2 导航控制器指向相同的视图

    有谁知道为什么这不起作用 这样 只有一个选项卡栏加载视图 另一个选项卡栏则显示黑屏 我在没有导航控制器的情况下尝试过 选项卡栏是正确的 而另一个在运行模式下不显示选项卡栏项目 如果有人感兴趣的话我对这个问题的回答 添加两个视图来启动我们感兴
  • 使用导航控制器在 Storyboard 中呈现视图控制器 - Swift

    我目前在下面的新故事板中显示了一个 viewController var storyboard UIStoryboard UIStoryboard name AccountStoryboard bundle nil var vc Welco
  • Facebook 登录 Apple CNA

    问题 是否可以设置 Facebook 登录以在 CNA 中使用 是否为开发人员提供 CNA 文档 您可以使用任何开发人员工具调试 CNA 屏幕吗 Details 我创建了一个使用电子邮件提交表单或 Facebook 登录按钮的强制门户登录页
  • 为什么 iOS 5.0 不喜欢纯窗口应用程序?为什么它要求使用视图控制器?

    我有一个使用 Xcode 4 0 的 基于窗口的应用程序 模板创建的 iOS 应用程序 当时运行良好 并且使用的是 iOS 4 3 SDK 这是一个简单地将按钮 标签等直接放置到窗口上的应用程序 没有视图控制器 什么都没有 但现在我已经升级
  • insertObject:atIndex 的复杂性:

    复杂度是多少 NSArray insertObject atIndex N 或常数 另外 如何找出各种 Objective C 语句的复杂度 有一个在这里讨论 http www cocoadev com index pl NSMutable
  • 带约束的 Swift 动画

    是否可以通过改变约束来制作 UIView 动画 基本上 我想要动画myv UIView 具有 x y 高度和宽度约束 使用 UIView animateWithDuration 1 5 通过改变旧的限制 是的 这是可能的 你可以这样做 fu
  • 在应用程序内启用或禁用 Iphone 推送通知

    我有一个 iPhone 应用程序 可以接收推送通知 目前 我可以通过转到 iPhone 设置 通知来禁用我的应用程序的推送通知 但我想在我的应用程序中添加一个开关或按钮来启用或禁用推送通知 这是可以做到的 因为我在 foursquare i
  • Swift 3 和 Xcode8 - init 的使用不明确

    在我安装 Xcode 8 并将项目转换为 Swift 3 之前 以下行没问题 现在转换后看起来像这样 let valueData Data Data bytes UnsafePointer

随机推荐

  • 如何在 FDT 内导航/更新 Haxe SDK?

    在 OSX 上 FDT 在此处提供 Haxe SDK Applications FDT 5 app Contents FDT5 haxe haxe 2 09 osx 因为它位于 OSX 包内部 所以我无法导航到它 我如何 在首选项中选择它
  • 为什么 splitViewController:collapseSecondaryViewController:ontoPrimaryViewController: 在 iPhone 6 Plus 上没有被调用?

    我实现了子类UISplitViewController在我的应用程序中 iPhone and iPad 当我旋转设备时 会调用标题中提到的方法Landscape to Portrait方向 除非我在 iPhone 6 Plus 上运行该应用
  • Azure PowerShell - 提取 Azure SQL 数据库信息

    我正在寻找一种方法来提取有关 Azure SQL 数据库的特定信息 已用空间 分配空间和最大存储大小 我知道可以从 Azure 门户获取该信息 但我想使用 PowerShell 来提取它 我已设法使用下面的命令提取一点信息 最大存储大小 但
  • 6000端口有什么特别之处?

    启动你的 Mac 从以下位置获取基本 Flask 应用程序快速启动页面 http flask pocoo org docs 0 10 quickstart 并将端口更改为 6000 这将为您提供以下内容 from flask import
  • 动态 jQuery 变量名

    我想获取 li ID 属性的值 这将是一个 userID 并将其用作字符串的一部分 我最终将使用该字符串作为变量名称的一部分 我将使用这个变量名来创建一个数组 我了解基础知识 但似乎无法找到 jQuery javascript 的正确组合来
  • 将 JavaMail 与自签名证书结合使用

    我有一个包含以下代码的 servlet System setProperty javax net ssl keyStore getServletContext getRealPath keystore jks System setPrope
  • 获取 PushManager 订阅时出错 - JavaScript

    我有以下代码 用于注册服务工作人员并要求用户允许通知 在用户允许推送通知 其中承诺返回 后 我收到错误serviceWorkerRegistration pushManager getSubscription is null 当我关闭浏览器
  • Rails - 显示索引结果并通过 ajax 显示操作

    我有一个非常简单的 Post 资源 有两个操作 索引和显示 我的模板包含一个侧边栏 其中包含指向之前每篇文章的链接 我希望侧边栏链接显示其内容 即 显示 操作的结果 通过阿贾克斯 我知道有很多出色的 http www alfajango c
  • 如何在数据迁移期间使用 mongoose 设置 UpdatedAt 时间戳

    我正在进行从 MS SQL 到 MongoDB 的数据迁移 我正在使用猫鼬 并在我的架构中将时间戳属性设置为 true timestamps true 然后 我尝试设置createdAt和updatedAt字段的值 插入记录时 create
  • 有没有人使用过 ios-sim 实用程序在模拟器中运行 .app 文件?

    如何通过 Developer50ios sim 的路径 我就这样过去了 有什么问题吗 ios sim launch verbose sdk 5 0 env Developer50 这似乎不起作用 I have Developer Devel
  • 如何将映射嵌入到结构中,使其具有平面 json 表示形式

    为了创建类似表的结构 我在之前的应用程序中以以下格式序列化了行数据 key1 key2 15 04 1 3 15 05 1 2 17 08 0 8 现在我正在尝试用 Go 重写它 以便通过实践经验来学习该语言 在 Go 中 可以通过将两个结
  • PDFBox 2.0.4:XFA 到文本错误

    我在尝试将 PDF XFA 转换为字符串时收到以下错误 当我从PDFBox 1 8 12 to PDFBox 2 0 4 这是日志 Mar 09 2017 7 16 07 AM org apache pdfbox pdfparser Bas
  • 如何防止Grails在删除父级时不删除子级?

    我的作者和书籍之间有一对多的关系 一个作者有很多本书 我有这样的域类 作者 groovy class Author String authorName String authorAddress String authorCNIC stati
  • Chart.js 加载全新数据

    该API用于chart js http www chartjs org docs line chart允许编辑加载到其中的数据集的点 例如 update 在 Chart 实例上调用 update 将重新渲染图表 任何更新的值 允许您编辑多个
  • ReactiveSwift 简单示例

    我读过文档 https github com ReactiveCocoa ReactiveSwift 浏览了他们精彩的 Playground 示例 搜索了 S O 并达到了我的程度谷歌 fu http www urbandictionary
  • Silverlight、RIA 和 ASP.Net 会话超时

    我们有一个要求 当 ASP NET 会话过期并且用户正在使用 Silverlight 插件时 我们希望将用户重定向到登录页面 因此 场景是 我们有一个运行 ASP Net 的旧应用程序 所有新模块都位于 Silverlight 中 并且旧应
  • ORA-1555: 快照太旧: 回滚段号

    任何想法 ORA 1555 快照太旧 回滚段号 我收到此错误 但似乎没有任何问题 请说明在什么情况下可能发生以及如何避免 频繁提交可能是导致 ORA 1555 的原因 这都是关于读取一致性的 当你开始查询时 oracle 会记录一个之前的图
  • java.io.IOException:不是带有 class.getResourceAsStream() 的 GZIP 格式

    我正在尝试从 jar 中的资源加载一些 GZIP 数据 但我得到了java io IOException Not in GZIP格式化消息 当我从文件加载相同的数据时 我没有收到任何错误 为什么 这是我用NetBeans编译的maven项目
  • 具有时间格式的 SQL AVG 函数

    所以我正在使用 Google Big Query 并且我想找到整个专栏的平均时间 整个列的时间格式为 hh mm ss 例如 00 19 00 select AVG ride length AS average duration FROM
  • 尝试将非属性列表对象设置为 NSUserDefaults

    我以为我知道是什么导致了这个错误 但我似乎无法弄清楚我做错了什么 这是我收到的完整错误消息 Attempt to set a non property list object