中断线程1:EXC_BAD_ACCESS

时间:2015-04-07 11:35:48

标签: ios objective-c

这是一段代码:

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版本中,一切正常,在新版本中不起作用。 (该项目是一年的一个楼层)

2 个答案:

答案 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"]];