【发布时间】:2016-10-13 14:18:59
【问题描述】:
我现在几乎一整天都处于如此忙碌的状态。 请查看并告诉您是否可以提供帮助...
这里我使用的是我的 CustomObjects(使用 NSCoder 实现的“警报对象”),将其保存到 NSUserDefaults
AlarmObject 有一个属性 (NSString *) 'tuneAddress' 的值类似于
"tunes/Alarm%20clock%20ringtones%20-%20free%20download.%20Mp3%20Alarm%20clock%20tones,%20sounds%20and%20ringtones%20for%20mobile%20phones.mp3"
我知道在这样的地址 (%20) 中解析空格是不好的,但不知何故我无法更改它。它来自尚未由我控制的服务器。
嗯, 第一个问题这里的问题是每当我使用“NSKeyedArchiver archivedDataWithRootObject”将一些对象添加到 NSUserDefaults 时,该对象具有正确的值,如上所示的“tuneAddress”,以及尝试通过“NSKeyedUnarchiver unarchiveObjectWithData”恢复它时。
在这里,我以“tuneAddress”值为“0x7fc0ab73d040”取回对象。 请看一下如果你能说一下这是什么..?
第二个问题取决于第一个问题,当我尝试通过“NSKeyedArchiver archivedDataWithRootObject”将其存档时,它会停在这里
[encoder encodeObject:self.tuneLocalAddress forKey:@"tuneLocalAddress"];
显示错误 EXC_BAD_ACCESS(code=EXC_i386_GPFLT)。
这里是一个小展示我如何将指向的字符串保存到 AlarmObject
[[NSUserDefaults standardUserDefaults] setObject:[newString stringByReplacingOccurrencesOfString:@" " withString:@"%20"] forKey:TuneChoosenForAlarm_Key];
AlarmObject * newAlarmObj = [[AlarmObject alloc] init];
newAlarmObj.tuneLocalAddress = [[NSUserDefaults standardUserDefaults] objectForKey:TuneChoosenForAlarm_Key];
NSMutableArray * newArray = [[NSMutableArray alloc] initWithObjects:newAlarmObj, nil];
for (AlarmObject * alarmObj in self.alarmsArray) {
[newArray addObject:alarmObj];
}
self.alarmsArray = newArray;
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:self.alarmsArray];
[[NSUserDefaults standardUserDefaults] setObject:data forKey:AlarmsDataDictonaryKey];
【问题讨论】:
-
stackoverflow.com/questions/7920071/…,用它来转换成普通字符串,然后执行归档/取消归档。
-
请粘贴您的代码。
-
您保存的数据方式和内容。
-
@vadian,感谢您正确格式化代码部分。你能帮我弄清楚我的方法犯了什么错误吗?
标签: ios objective-c nsstring nsdata nscoder