2012-04-03 65 views
0

我使用下面的代碼在我的.m文件中使用「未聲明的標識符」錯誤,似乎無法解決問題。使用未聲明的標識符錯誤

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]; 

在我的.h文件中,我有40張圖片,所有引用網點:

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

其中X是1-40的數字。在我的.m文件中,NSArray * imagesViews只要在方法內部就可以正常工作,但我無法在方法外部聲明它,因此它可用於所有方法。作爲Objective-C的新手,我不會從這裏走到哪裏。我會很感激任何幫助。

+0

恰尼看看你的.m文件? – 2012-04-03 10:28:40

+2

使用'self.imgX'而不是'imgX'來填充數組 – 2012-04-03 10:28:44

回答

4

您不必初始化數組以外的方法使其可以從所有方法訪問。你應該做的是聲明它作爲一個屬性,並在viewDidLoad方法中初始化它。

.h文件:

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

.m文件:

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

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

另外請注意,因爲你有40個圖像視圖,你應該避免聲明爲屬性他們中的每一個。您可以爲它們分配標籤,然後使用方法viewWithTag檢索它們。

+0

值得注意的是,如果這應該用ARC編譯。 – MrTJ 2012-04-03 10:43:53

+0

謝謝。現在正在工作 - 我仍然真正掌握了自我的正確用法。感謝您使用這些標籤的建議,但此時此刻我已經有足夠的時間了。一旦我得到應用程序的工作,我可能會回來。 – garethdn 2012-04-03 10:44:45

+1

@MrTJ - OP正在使用'weak'屬性,所以我假設他正在使用ARC。 – sch 2012-04-03 10:48:30

0

在標題:

@interface MyClass : NSObject { 
    NSArray *imageViews; 
} 

@end 

在實施:

@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

如果您還需要在類的_outside_上使用imageViews,則還可以使用屬性。 – MrTJ 2012-04-03 10:44:20