appdelegate中的NSMutableArray - EXEC_BAD_ACCESS

时间:2010-06-07 15:44:46

标签: iphone iphone-sdk-3.0

我正在尝试在appdelegate中使用全局数组作为我正在构建的演示的快速修复。这个

的相关代码

.h文件具有声明

  

{
  NSMutableArray * trnEntered;
  }

     

@property(nonatomic,retain)NSMutableArray * trnEntered

.m文件包含以下代码 -

  

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

不知道我在哪里错了。看起来相当直接。

感谢您的帮助,
的Teja。

4 个答案:

答案 0 :(得分:3)

您的代码似乎存在问题:

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

答案 1 :(得分:0)

第一个NSLog不应该打印'null',你的init方式有问题。试试这个。

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

默认情况下,

NSLog以字符串格式打印,因此如果要打印整数值,则必须使用%d及其值。