这是一段代码:
for (int i = 0; i < _sevenForDisplay.length; i++) {
_sevensForReplace = [_sevensForReplace stringByReplacingCharactersInRange:NSMakeRange([[_sevenForDisplay substringWithRange:NSMakeRange(i,1)] intValue]-1,1) withString:@"1"];
NSOperation *operation = [[NSInvocationOperation alloc]
initWithTarget:self
selector:@selector(blinkPicSeven:)
object:@(_forBlink)];
[queue addOperation:operation];
}
[userDefaults setObject:_sevensForReplace forKey:@"sevens"];
当代码在程序的工作过程中执行时,最后一行出现错误消息 - 线程1:EXC_BAD_ACCESS(代码= 1,地址= 0x7a0090018)。
我一步一步地开始调试(我在一个周期的开始,进一步在F6上),一切都正常通过。
在旧的OSX和Xcode版本中,一切正常,在新版本中不起作用。 (该项目是一年的一个楼层)
答案 0 :(得分:1)
确保在[[NSString alloc]init]
之前_sevensForReplace
伪造一个值。现在看来,特别是在XCode 6上。+ SDK被选为8.2那些不分配(init)的NSString
似乎崩溃应用程序,尽管在8.2之前没有必要这个措施
答案 1 :(得分:0)
如果您不想分配,init可以这样使用它:
[self setSevensForReplace:[[self sevensForReplace] stringByReplacingCharactersInRange:NSMakeRange([[[self sevensForReplace] substringWithRange:NSMakeRange(i,1)] intValue]-1,1) withString:@"1"]];