使用 NSUSERDEFAULTS
Working with NSUSERDEFAULTS
我正在尝试将 NSMutableArray 保存在 NSUserDefaults 中。这是我的代码
(void) alarmSetting :(AlarmObject *)alarmObject
{
[alarmSelect addObject:alarmObject];
time = alarmObject.clockDate;
title = alarmObject.titleForAlarm;
repeat = alarmObject.repeatData;
video = alarmObject.titleOfTheVideo;
double uniqueId = alarmObject.uniqueTime;
ID = [NSNumber numberWithDouble:uniqueId];
if(![[NSUserDefaults standardUserDefaults] objectForKey:@"MyAlarms"])
{
alarmToBeSaved= [[NSMutableArray alloc] init];
}
else
{
alarmToBeSaved=[[NSUserDefaults standardUserDefaults] valueForKey:@"MyAlarms"] ;
}
[alarmToBeSaved addObject:alarmObject];
[[NSUserDefaults standardUserDefaults] setObject: alarmToBeSaved forKey:@"MyAlarms"];
NSLog(@"%@",[[NSUserDefaults standardUserDefaults] objectForKey:@"MyAlarms"]);
[[NSUserDefaults standardUserDefaults] synchronize];
[tbleView reloadData];
}
但是我收到一个错误
016-02-25 14:40:05.003 Alarm[3229:87627] Attempt to set a non-property-list object (
"<AlarmObject: 0x7ff4807ecd80>"
) as an NSUserDefaults/CFPreferences value for key MyAlarms
2016-02-25 14:40:05.054 Alarm[3229:87627] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Attempt to insert non-property list object (
"<AlarmObject: 0x7ff4807ecd80>"
) for key MyAlarms'
为什么会这样??我搜索了这个错误,我不明白,因为我在 NSUserDefaults.
中保存了一个数组
您发布的代码试图将一组自定义对象保存到 NSUserDefaults 中。当然,你不能那样做。实现 NSCoding 方法没有帮助,您只能在 NSUserDefaults 中存储 NSArray、NSDictionary、NSString、NSData、NSNumber 和 NSDate 等内容。
首先,您需要将对象转换为 NSData,然后将该 NSData 存储在 NSUserDefaults 中。如果需要,您甚至可以存储 NSData 的 NSArray。
当您读回数组时,您需要取消归档 NSData 以取回您的 BC_Person 对象。这是NSKeyedArchiver的逆过程。
保存
NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:yourObject];
[currentDefaults setObject:data forKey:@"yourKeyName"];
获取
NSData *data = [currentDefaults objectForKey:@"yourKeyName"];
yourObjectType * token = [NSKeyedUnarchiver unarchiveObjectWithData:data];
For Remove
[currentDefaults removeObjectForKey:@"yourKeyName"];
希望对您有所帮助:)
我正在尝试将 NSMutableArray 保存在 NSUserDefaults 中。这是我的代码
(void) alarmSetting :(AlarmObject *)alarmObject
{
[alarmSelect addObject:alarmObject];
time = alarmObject.clockDate;
title = alarmObject.titleForAlarm;
repeat = alarmObject.repeatData;
video = alarmObject.titleOfTheVideo;
double uniqueId = alarmObject.uniqueTime;
ID = [NSNumber numberWithDouble:uniqueId];
if(![[NSUserDefaults standardUserDefaults] objectForKey:@"MyAlarms"])
{
alarmToBeSaved= [[NSMutableArray alloc] init];
}
else
{
alarmToBeSaved=[[NSUserDefaults standardUserDefaults] valueForKey:@"MyAlarms"] ;
}
[alarmToBeSaved addObject:alarmObject];
[[NSUserDefaults standardUserDefaults] setObject: alarmToBeSaved forKey:@"MyAlarms"];
NSLog(@"%@",[[NSUserDefaults standardUserDefaults] objectForKey:@"MyAlarms"]);
[[NSUserDefaults standardUserDefaults] synchronize];
[tbleView reloadData];
}
但是我收到一个错误
016-02-25 14:40:05.003 Alarm[3229:87627] Attempt to set a non-property-list object (
"<AlarmObject: 0x7ff4807ecd80>"
) as an NSUserDefaults/CFPreferences value for key MyAlarms
2016-02-25 14:40:05.054 Alarm[3229:87627] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Attempt to insert non-property list object (
"<AlarmObject: 0x7ff4807ecd80>"
) for key MyAlarms'
为什么会这样??我搜索了这个错误,我不明白,因为我在 NSUserDefaults.
中保存了一个数组您发布的代码试图将一组自定义对象保存到 NSUserDefaults 中。当然,你不能那样做。实现 NSCoding 方法没有帮助,您只能在 NSUserDefaults 中存储 NSArray、NSDictionary、NSString、NSData、NSNumber 和 NSDate 等内容。
首先,您需要将对象转换为 NSData,然后将该 NSData 存储在 NSUserDefaults 中。如果需要,您甚至可以存储 NSData 的 NSArray。
当您读回数组时,您需要取消归档 NSData 以取回您的 BC_Person 对象。这是NSKeyedArchiver的逆过程。
保存
NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:yourObject];
[currentDefaults setObject:data forKey:@"yourKeyName"];
获取
NSData *data = [currentDefaults objectForKey:@"yourKeyName"];
yourObjectType * token = [NSKeyedUnarchiver unarchiveObjectWithData:data];
For Remove
[currentDefaults removeObjectForKey:@"yourKeyName"];
希望对您有所帮助:)