2015-04-07 100 views
2

下面是一个代码:中断线程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版本中,一切正常,在新版本中不起作用。 (该项目一年的地板)

回答

1

请确保您[[NSString alloc]init]您的_sevensForReplace之前伪造一个值。现在看来,尤其是上了XCode 6 +与SDK选定为8.2的NSString这是分配(INIT)似乎崩溃的应用程序,尽管这种措施是不是真的有必要之前8.2

0

如果你不想alloc,init你可以这样使用它:

[self setSevensForReplace:[[self sevensForReplace] stringByReplacingCharactersInRange:NSMakeRange([[[self sevensForReplace] substringWithRange:NSMakeRange(i,1)] intValue]-1,1) withString:@"1"]]; 
相关问题