2012-04-03 13 views
0

Ich bekomme "Verwendung von nicht deklarierten Bezeichner" Fehler in meiner .m-Datei mit dem Code unten und kann nicht scheinen, es auszuarbeiten.Verwendung von nicht deklarierten Bezeichner Fehler

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 meiner .h-Datei habe ich 40 Bilder, die alle mit Referenzierung Stellen:

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

wobei X eine Zahl von 1 bis 40 ist. In meiner .m-Datei funktioniert das NSArray * imagesViews gut, solange es in einer Methode ist, aber ich kann es nicht außerhalb der Methode deklarieren, so dass es für alle Methoden verfügbar ist. Als Objective-C-Novize bin ich nicht von hier weg. Ich würde mich über jede Hilfe freuen.

+0

cani haben einen Blick auf Ihre .m-Datei? –

+2

Verwenden Sie 'self.imgX' anstelle von' imgX', um das Array zu füllen –

Antwort

4

Sie müssen nicht initialisieren das Array außerhalb einer Methode, um es von allen Methoden zugänglich machen. Was Sie stattdessen tun sollten, ist deklarieren Sie es als eine Eigenschaft und initialisieren Sie es innerhalb der viewDidLoad Methode.

In der .h Datei:

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

In der .m Datei:

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

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

Beachten Sie auch, dass, weil Sie 40 Bildansichten haben, sollten Sie vielleicht eine Eigenschaft vermeiden erklärt für jeder von Ihnen. Sie können ihnen Tags zuweisen und sie dann mit der Methode viewWithTag abrufen.

+0

Wert zu beachten, wenn dies mit ARC kompiliert werden soll. – MrTJ

+0

Danke. Das funktioniert jetzt - ich habe immer noch wirklich die richtige Verwendung von Selbst verstanden. Danke für den Vorschlag, die Tags zu verwenden, aber ich habe gerade genug Zeit damit. Ich kann zurückkommen, sobald ich die Anwendung funktioniert habe. – garethdn

+1

@MrTJ - OP verwendet 'schwache' Eigenschaften, also nehme ich an, dass er ARC verwendet. – sch

0

In der Kopfzeile:

@interface MyClass : NSObject { 
    NSArray *imageViews; 
} 

@end 

Bei der Umsetzung:

@implementation MyClass 

- (id) init 
{ 
    self = [super init]; 
    if (self != nil) { 
     imageViews = [[NSArray arrayWithObjects:img1, nil] retain]; 
    } 
    return self; 
} 

// now you can use imageViews also from other methods 

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

@end 
+0

Wenn Sie die imageViews auch außerhalb der Klasse verwenden müssen, können Sie auch Eigenschaften verwenden. – MrTJ

Verwandte Themen