在appdelegate NSMutableArray - EXEC_BAD_ACCESS

问题描述:

我想在appdelegate中使用全局数组作为我正在构建的演示的快速修复。此在appdelegate NSMutableArray - EXEC_BAD_ACCESS

的.h文件中的相关代码具有声明

{
的NSMutableArray * trnEntered;
}

@属性(非原子,保留)的NSMutableArray * trnEntered

.m文件具有下面的代码 -

trnEntered = [[NSMutableArray里的alloc] INIT];
NSLog(@“%@”,[trnEntered count]); //打印null。
[trnEntered addObject:@“1”];
NSLog(@“%@”,[trnEntered count]);//执行不良访问。

不知道我在哪里错了。看起来非常简单。

感谢您的帮助,
Teja。

似乎有你的代码有问题:

NSLog(@"%@",[trnEntered count]); // prints null. 
[trnEntered addObject:@"1"]; 
NSLog(@"%@",[trnEntered count]); // exec bad access. 

到NSLog的两个呼叫尝试打印NSUInteger作为一个Objective-C的对象。这会导致问题。你应该使用NSLog(@"%d", [trnEntered count]);

我建议你阅读更多关于format specifiers,有很多有用的信息。

更多信息:第二个NSlog试图打印代码声明位于内存位置0x00000001的NSObject的description

+0

哎,我就知道是这样的,我不能相信我浪费为2小时这一点。谢谢! – 2010-06-07 15:59:41

+0

非常欢迎。我也花了太多时间在简单的问题上:) – 2010-06-07 16:01:20

第一的NSLog不能打印“空”,你有你init.Try这个代替的方式有问题。

trnEntered = [[NSMutableArray alloc] initWithCapacity:1]; 

trnEntered = [[NSMutableArray alloc] init]; 
NSLog(@"%@",[trnEntered count]); // prints null. 
[trnEntered addObject:@"1"]; 
NSLog(@"%@",[trnEntered count]); // exec bad access. 

原因是因为您使用格式化程序字符串错误。你正在尝试使用一个整数作为字符串指针,这当然会导致一个分段错误(或苹果术语中的EXC_BAD_ACCESS)。使用%d打印一个整数,这是[trnEntered count]返回的值。

NSLog默认打印字符串格式的ans,所以如果你想打印整数值,那么你必须使用%d及其值。