0
votes

I'm trying to use a global array in the appdelegate as a quick fix for a demo 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.

4

4 Answers

3
votes

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.

0
votes

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

trnEntered = [[NSMutableArray alloc] initWithCapacity:1];
0
votes
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.

0
votes

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.