我现在处于如此紧张的状态,差不多整整一天。 请看看并告诉你是否可以提供帮助......
这里我使用的是CustomObjects(使用NSCoder实现的'Alarm Object'),将其保存到NSUserDefaults
AlarmObject有一个属性(NSString *)'tuneAddress',其值类似于
“曲调/报警%20clock%20ringtones%20-%20free%20download。%20Mp3%20Alarm%20clock%20tones,%20sounds%20于是%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];
答案 0 :(得分:0)
在这里,我找到了原因,错误是在基级。虽然在这里创建'AlarmObject'是'tuneLocalAddress',其内存属性为“assign”,这正是我错误的地方。
如果您正在使用ARC并且想要在内存中保留某些属性(tuneLocalAddress)的值,直到该对象正在使用中,那么您应该使用{retain'或'strong'从{{3}获得一点想法}。
我希望你能理解。 对不起,任何语法错误。