Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >NSUserDefaults数据保存报错:Attempt to set a non-property-list object.

NSUserDefaults数据保存报错:Attempt to set a non-property-list object.

作者头像
honey缘木鱼
发布于 2018-08-02 07:09:44
发布于 2018-08-02 07:09:44
1.2K00
代码可运行
举报
文章被收录于专栏:娱乐心理测试娱乐心理测试
运行总次数:0
代码可运行

在使用NSUserDefaults的时候插入数据有时候会报以下错误:

1.这种错误的原因是插入了不识别的PaymentModel数据类型,NSUserDefaults支持的数据类型有NSString、 NSNumber、NSDate、 NSArray、NSDictionary、BOOL、NSInteger、NSFloat等系统定义的数据类型。想保存自定义的数据类型时,我们可以转成NSData再存入。

将PaymentModel类型变成NSData类型就必须实现归档,在PaymentModel.h文件中遵守NSCoding协议,在PaymentModel.m文件中实现encodeWithCoder和initWithCoder 方法。如下所示:

PaymentModel.h

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@interface PaymentModel : NSObject<NSCoding>

//标题
@property (nonatomic, copy)NSString *title;
//图片
@property (nonatomic, copy)NSString *picture;

@end

PaymentModel.m

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#import "PaymentModel.h"

@implementation PaymentModel

- (void)encodeWithCoder:(NSCoder *)aCoder {
    [aCoder encodeObject:self.title forKey:@"title"];
    [aCoder encodeObject:self.picture forKey:@"picture"];
}

- (id)initWithCoder:(NSCoder *)aDecoder {
    if (self = [super init]) {
        self.title = [aDecoder decodeObjectForKey:@"title"];
        self.picture = [aDecoder decodeObjectForKey:@"picture"];
    }
    return self;
}

@end

2.有时NSUserDefaults报存数组,字典,还是报错,原因是我里边的数据结构有"<null>",而NSUserDefaults是不能被成功解析并存入的,所有在存入之前需要将里边的"<null>"改成""即可。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.07.14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
objective-C中的序列化(serialize)与反序列化(deserialize)
obj-c中有一类对象:NSArray,NSDictionary,NSString,NSNumber,NSDate,NSData以及它们的可变版本(指NSMutableArray,NSMutableDictionary...这一类) ,都可以方便的将自身的数据以某种格式(比如xml格式)序列化后保存成本地文件。 示例代码:NSArrayTest.h #import <Foundation/Foundation.h> #define FILE_NAME @"/tmp/data.txt" @interface
菩提树下的杨过
2018/01/22
2K0
objective-C中的序列化(serialize)与反序列化(deserialize)
编码篇-持久化NSUserDefaults
NSUserDefaults类,以字典形式保存数据,IOS会自动把字典中的键值对转换成对应的XML文件(也就是plist文件),这个文件会被保存到APP的沙盒目录中(路径为Library/Preferences/plist文件名)。
進无尽
2018/09/12
1.3K0
编码篇-持久化NSUserDefaults
iOS学习——iOS常用的存储方式
不管是在iOS还是Android开发过程中,我们都经常性地需要存储一些状态和数据,比如用户对于App的相关设置、需要在本地缓存的数据等等。根据要存储的的数据的大小、存储性质以及存储类型,在iOS和Android中哪个都有多种存储方式。其中,iOS中的存储方式主要包括以下六类: plist文件(属性列表) preference(偏好设置) NSKeyedArchiver(归档) SQLite 3 CoreData 手动存放沙盒 一、沙盒机制 在研究存储方式之前,我们有必要先研究下这些文件会存储到什么地方去
mukekeheart
2018/03/01
3.1K0
iOS学习——iOS常用的存储方式
NSCopying和NSCoding对象序列化反序列化基础详解你要知道的NSCopying、NSCoding协议及对象序列化和反序列化都在这里
你要知道的NSCopying、NSCoding协议及对象序列化和反序列化都在这里 转载请注明出处 https://cloud.tencent.com/developer/user/1605429 本篇文章主要讲解NSCopying协议,以及NSCoding协议实现对象的序列化和反序列化,实际开发中如果要自己造轮子这两个协议还是比较重要的。 NSCopying协议 Foundation框架中为我们提供的基础的类基本都实现了NSCopying协议,因此,我们可以使用copy方法用来获取对象的一个不可变副本对象,
WWWWDotPNG
2018/04/10
1.5K0
iOS_runtime实现NSCoding NSCoder缓存对象 NSCoping
NSCoder 是一个抽象类,抽象类不能被实例话,只能提供一些想让子类继承的方法。
mikimo
2022/07/20
4320
利用runtime进行归档解档
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/62233752
用户1451823
2018/09/13
4240
Mantle--国外程序员最常用的iOS模型&字典转换框架
ios122
2018/01/02
1.7K0
iOS开发——数据持久化之归档
在实际的项目开发中,数据持久化是我们必须要考虑的一个事情,如何把我们需要的数据进行持久化处理。
Originalee
2018/08/30
6590
iOS数据持久化
// // AppDelegate.m // // import "AppDelegate.h" import "Person.h" @interface AppDelegate () @end @implementation AppDelegate (void)dealloc { [_window release]; [super dealloc]; } (BOOL)application:(UIApplication )application didFinishLaunchingWith
大师级码师
2021/10/29
5620
浅谈 NSUserDefaults
每次程序启动的时候调用 registerDefaults: 方法都是安全的,完全可以将这个方法的调用放到 applicationDidFinishLaunching: 方法中,这个方法永远都不会覆盖用户设置的值。
s_在路上
2018/09/30
7130
iOS数据持久化之二——归档与设计可存储化的数据模型基类
        在上一篇博客中,我们介绍了用plist文件进行数据持久化的方法。虽然简单易用,但随着开发的深入,你会发现,这种方式还是有很大的局限性。试想,如果我们可以将用户的登录返回信息模型,游戏中角色的属性信息模型进行直接的持久化存取,那是不是非常爽的事,幸运的是,我们可以通过归档,来设计一个这样的数据模型。
珲少
2018/08/16
1.2K0
iOS数据持久化之二——归档与设计可存储化的数据模型基类
iOS开发--常用的数据存储方式
1、XML属性列表(plist)归档 2、preference(偏好设置) 3、NSKeyedArchiver归档(NSCoding) 4、SQLite3 5、Core Data
孙寅
2020/06/02
9260
【IOS开发基础系列】数据持久化专题
iOS中可以有四种持久化数据的方式: 属性列表、对象归档、SQLite3和Core Data。
江中散人_Jun
2023/10/16
4190
【IOS开发基础系列】数据持久化专题
share extension
默认继承 SLComposeViewController  则弹跳框也是固定死的  如果要diy 请继承uiviewcontroller  可以在storyboard或者代码写布局  实现 NSURLSessionDelegate,NSURLSessionDownloadDelegate
conanma
2021/05/11
9500
YYModel使用的小技巧
作为iOS开发的著名三方库YYKit可以说是家喻户晓,是一个集大成的开源库,今天我们说一下关于旗下的JSON转换功能小技巧
大话swift
2019/11/20
1.6K0
YYModel使用的小技巧
老司机出品——数据持久化之基于FMDB的ORM数据库设计
这次呢,我们来说说iOS中数据持久化的几种方案。说到iOS中的数据存储,无非有4中方式:
老司机Wicky
2018/08/22
1.2K0
老司机出品——数据持久化之基于FMDB的ORM数据库设计
iOS进阶之runtime作用
前言 Runtime基本是用C和汇编写的,可见苹果为了动态系统的高效而作出的努力。你可以在这里下到苹果维护的开源代码。苹果和GNU各自维护一个开源的runtime版本,这两个版本之间都在努力的保持一致。Objective-C 从三种不同的层级上与 Runtime 系统进行交互,分别是通过 Objective-C 源代码,通过 Foundation 框架的NSObject类定义的方法,通过对 runtime 函数的直接调用。大部分情况下你就只管写你的Objc代码就行,runtime 系统自动在幕后辛勤劳作着。
Dwyane
2018/05/22
6550
iOS 开发:『Runtime』详解(四)获取类详细属性、方法
文中示例代码在: bujige / YSC-Class-DetailList-Demo
程序员充电站
2019/08/02
3K0
【iOS开发】两个函数搞定本地存储
平时我们经常会采用 NSUserDefaults 或者 Plist 来存储数据到设备,这样即使 App 被关闭,下次再打开的时候数据还在。这里我写了两个函数来供大家使用,一个用来存数据,一个用来读数据。
KyXu
2019/04/11
5550
【iOS开发】两个函数搞定本地存储
OC最实用的runtime总结,面试、工作你看我就足够了!前言什么是runtime?如何应用运行时?
前言 runtime的资料网上有很多了,部分有些晦涩难懂,我通过自己的学习方法总结一遍,主要讲一些常用的方法功能,以实用为主,我觉得用到印象才是最深刻的,并且最后两个demo也是MJExtension的实现原理,面试的时候也可以多扯点。 另外runtime的知识还有很多,想要了解更多可以看我翻译的官方文档(有点枯燥),本文的demo下载地址 什么是runtime? runtime 是 OC底层的一套C语言的API(引入 <objc/runtime.h> 或<objc/message.h>),编译器最终都会
用户2141756
2018/05/18
1.4K0
推荐阅读
相关推荐
objective-C中的序列化(serialize)与反序列化(deserialize)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验