Use of undeclared identifier errors

garethdn picture garethdn · Apr 3, 2012 · Viewed 8.5k times · Source

i'm getting "use of undeclared identifier" errors in my .m file with the code below and can't seem to work it out.

NSArray *imageViews = [NSArray arrayWithObjects:img1, img2, img3, img4, img5, img6, img7, img8, img9, img10, img11, img12, img13, img14, img15, img16, img17, img18, img19, img20, img21, img22, img23, img24, img25, img26, img27, img28, img29, img30, img31, img32, img33, img34, img35, img36, img37, img38, img39, img40, nil];

In my .h file i have 40 images, all with referencing outlets:

@property (weak, nonatomic) IBOutlet UIImageView *imgX;

where X is a number from 1-40. In my .m file, the NSArray *imagesViews works fine as long as it's inside a method, but i can't declare it outside the method so that it is available to all methods. As an Objective-C novice, I don't where to go from here. I'd appreciate any help.

Answer

sch picture sch · Apr 3, 2012

You don't have to initialize the array outside of a method to make it accessible from all methods. What you should do instead is declare it as a property and initialize it inside the viewDidLoad method.

In the .h file:

@property (strong, nonatomic) NSArray *imageViews;
@property (weak, nonatomic) IBOutlet UIImageView *img1;
// ...

In the .m file:

@synthesize imageViews, img1, img2, ...
// ...

- (void)viewDidLoad
{
    [super viewDidLoad];
    // ...
    self.imageViews = [NSArray arrayWithObjects:self.img1, self.img2, ... , nil];
}

Also, note that because you have 40 image views, you should probably avoid declaring a property for each one of them. You can assign tags to them, and then retrieve them using the method viewWithTag.