开发者

NSMutableArray in appdelegate - EXEC_BAD_ACCESS

I'm trying to use a global array in the appdelegate as a quick fix for a demo 开发者_StackOverflow社区I'm building. The relevant code for this

.h file has the declaration

{

NSMutableArray *trnEntered;

}

@property (nonatomic, retain) NSMutableArray *trnEntered

.m file has the following code -

trnEntered = [[NSMutableArray alloc] init];

NSLog(@"%@",[trnEntered count]); // prints null.

[trnEntered addObject:@"1"];

NSLog(@"%@",[trnEntered count]); // exec bad access.

Not sure where I'm going wrong here. Looks fairly straight forward.

Thanks for the help in advance,

Teja.


There seems to be a problem with your code:

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

Both calls to NSLog are trying to print an NSUInteger as an Objective-C object. This is going to cause a problem. You should use NSLog(@"%d", [trnEntered count]);

I would suggest that you read more on format specifiers, there is a lot of useful information.

As a little more information: the second NSlog is trying to print the description of the NSObject that the code claims is located at memory location 0x00000001.


The first NSLog should not print 'null', you have a problem with the way you init.Try this instead.

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


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

The reason is because you're using the formatter string wrong. You're trying to use an integer as a string pointer, which will of course lead to a segmentation fault (or EXC_BAD_ACCESS in apple terms). Use %d to print an integer, which is what [trnEntered count] returns.


NSLog print ans in String format by default, so if you want to print integer value then you have to use %d and its value.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜