NSUserDefaults 存储可变数组问题

废话不多说上代码,项目中遇到的问题是:

NSMutableArray * arrayLoginNames = [NSMutableArray array];

arrayLoginNames  = [[NSUserDefaults standardUserDefaults] mutableArrayValueForKey:KLastLoginNameForAutoSendMsgToKeFu];

这句话取出了数组,可是当对数组添加元素后,进行存储时卡在了下面这句话:

[[NSUserDefaults standardUserDefaults] setObject:arrayLoginNames forKey:KLastLoginNameForAutoSendMsgToKeFu];

把主线程卡主,但是不崩溃,不知道为何,就Google了,stackoverflow给了解答办法,

When you store mutable objects to NSUserDefaults, it stores an immutable copy of it so you can‘t change it directly like that. You have to get the mutable copy out of defaults, change it, and then set it back, replacing old object in defaults.

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSMutableArray *mutableArrayCopy = [[prefs objectForKey:@"theArray"] mutableCopy];
[mutableArrayCopy addObject:@"some new value"];
[prefs setObject:mutableArrayCopy forKey:@"theArray"];

[[NSUserDefaults standardUserDefaults] synchronize];

 
时间: 2024-10-13 22:51:29

NSUserDefaults 存储可变数组问题的相关文章

数组使用NSUserDefaults存储的问题,

最近在做搜索记录的时候,由于搜索记录是存储在本地的,而且都是字符串,我考虑到数据量也不是太大,于是就懒的使用数据库了. 于是就想到了NSUserDefaults 存储的方式, 但是由于之间对于数组没有这样保存过,也没有考虑太多,就直接: [[NSUserDefaults standardUserDefaults]setObject:self.searchHistoryDataArr forKey:@"SEARCHHISTORYDATA"]; [[NSUserDefaults stand

NSUserDefaults 简介,使用 NSUserDefaults 存储自定义对象

一.了解NSUserDefaults以及它可以直接存储的类型 NSUserDefaults是一个单例,在整个程序中只有一个实例对象,他可以用于数据的永久保存,而且简单实用,这是它可以让数据自由传递的一个前提,也是大家喜欢用它保存简单数据的一个主要原因. 使用 NSUserDefaults 存储自定义对象的最初,我们必须认识NSUserDefaults可以存储哪一些类型的数据,下面一一列出: NSUserDefaults支持的数据类型有:NSNumber(NSInteger.float.doubl

NSUserDefaults 存储数据到本地,NSUserDefaults 使用

//以下是我用 NSUserDefaults 将 NSData 类型的地址数组存在本地. UserAddressEntity *userAddressEntity = [[UserAddressEntity alloc]init];     userAddressEntity.addName = addName.text;     userAddressEntity.addPhone = addPhone.text;     userAddressEntity.addressInfo = [NS

转-NSUserDefaults 简介,使用 NSUserDefaults 存储自定义对象

转自:http://my.oschina.net/u/1245365/blog/294449 摘要 NSUserDefaults适合存储轻量级的本地数据,一些简单的数据(NSString类型的)例如密码,网址等,NSUserDefaults肯定是首选,但是如果我们自定义了一个对象,对象保存的是一些信息,这时候就不能直接存储到NSUserDefaults了 目录[-] 一.了解NSUserDefaults以及它可以直接存储的类型 二.使用 NSUserDefaults 存储自定义对象 1.将自定义

使用 NSUserDefaults 存储自定义对象

摘要 : NSUserDefaults适合存储轻量级的本地数据,一些简单的数据(NSString类型的)例如密码,网址等,NSUserDefaults肯定是首选,但是如果我们自定义了一个对象,对象保存的是一些信息,这时候就不能直接存储到NSUserDefaults了 一.了解NSUserDefaults以及它可以直接存储的类型 NSUserDefaults是一个单例,在整个程序中只有一个实例对象,他可以用于数据的永久保存,而且简单实用,这是它可以让数据自由传递的一个前提,也是大家喜欢用它保存简单

Objective - C NSArray不可变数组和NSMutableArray可变数组

OC中存储数据最常用 的两个容器就是数组和字典,而作为最常用的,应该了解这所有的特点,及用法. OC中的数组是一个容量,有序的管理了一系列元素,并且存放在数组里的元素,必须是对象类型. 不可变数组,见名知意,不可改变的,只要创建成功之后都不能改变数组容量,元素. 创建一个不可变数组对象 //1.初始化方法(多个对象用逗号隔开,并且最后一个对象与nil之间也要有逗号) NSArray *array1 = [[NSArray alloc] initWithObjects:@"zhonger"

可变数组NSMutableArray

//NSMutableArray 继承至 NSArray // NSArray * array = @[]; //1.创建可变数组 NSMutableArray * array = [[NSMutableArray alloc] initWithCapacity:0]; //使用addObject 动态给数组中增加元素 /* [array addObject:@"one"]; [array addObject:@"two"]; [array addObject:@&

Objective-C 数组与可变数组

知识点 1.NSArray 类的重点函数使用 2.NSMutableArray 类的重点函数使用 3.字符串的分割和拼接 ============================ NSArray,    NSMutableArray 1.[需要理解的知识] 1.1 C语言中数组 1. 相同数据类型的集合: int a[10]; float b[20]; char c[30]; 2. 数组地址是连续; 1.OC数组和c数组的区别 1.NSArray是个类 数组是对象: 存储也是对象: 2.数组不能

OC-NSArray-NSMutableArray-数组-可变数组

1,OC语言和c语言的数组区别     oc语言的数组只能存储对象指针,不能存储基本类型 2,数组的创建 (1),initWithObjects:  initWithObject (2)@[@"jack"...]; (2),initWithArray: (3),arrayWithObjects:   arrayWithObject (4),arrayWithArray: 3,数组常用方法 (1),获取元素个数:count  [arr count]     arr.count (2),通