iphone - How to access a string in a class stored in an array? -


i have string (titlename) stored in class (newnotebook) stored in array (mylibrary). trying access it, (null) printed in log.

what doing wrong?

-(void) setuplibrary {      notebook *newnotebook = [[notebook alloc] init];      newnotebook.titlename = @"test";     nslog(@"titlename:%@", newnotebook.titlename); // prints test in log     [mylibrary addobject:newnotebook];     nslog(@"titlename:%@", [[self.mylibrary objectatindex:0] titlename]); // prints (null) in log) } 

there nothing fancy in class... simply:

@interface notebook : nsobject {  nsstring *titlename; }   @property (nonatomic, retain) nsstring *titlename; @end  @implementation notebook @synthesize titlename; 

possible reasons:

  • mylibrary (the instance variable) nil;
  • self.mylibrary nil or backing instance variable isn’t mylibrary;
  • [self.mylibrary objectatindex:0] not same object newnotebook because there @ least 1 other element in self.mylibrary.

edit: need create new mutable array , assign property/instance variable mylibrary:

self.mylibrary = [nsmutablearray array]; 

or

mylibrary = [[nsmutablearray alloc] init]; 

where should depend on how class used. if instance of class should have valid mylibrary, place in -init:

- (id)init {     self = [super init];     if (self) {         mylibrary = [[nsmutablearray alloc] init];     }     return self; } 

alternatively, if want lazily create mylibrary when -setuplibrary executed, create in method:

-(void) setuplibrary {     self.mylibrary = [nsmutablearray array];      notebook *newnotebook = [[notebook alloc] init];     … } 

don’t forget release in -dealloc method:

- (void)dealloc {     [mylibrary release];     [super dealloc]; } 

Comments