在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
。
第一的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
及其值。
哎,我就知道是这样的,我不能相信我浪费为2小时这一点。谢谢! – 2010-06-07 15:59:41
非常欢迎。我也花了太多时间在简单的问题上:) – 2010-06-07 16:01:20