中断线程1:EXC_BAD_ACCESS
问题描述:
下面是一个代码:中断线程1:EXC_BAD_ACCESS
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版本中,一切正常,在新版本中不起作用。 (该项目一年的地板)
答
请确保您[[NSString alloc]init]
您的_sevensForReplace
之前伪造一个值。现在看来,尤其是上了XCode 6 +与SDK选定为8.2的NSString
这是不分配(INIT)似乎崩溃的应用程序,尽管这种措施是不是真的有必要之前8.2
答
如果你不想alloc,init你可以这样使用它:
[self setSevensForReplace:[[self sevensForReplace] stringByReplacingCharactersInRange:NSMakeRange([[[self sevensForReplace] substringWithRange:NSMakeRange(i,1)] intValue]-1,1) withString:@"1"]];