2012-04-03 67 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