Objective c 使用未声明的标识符错误

Objective c 使用未声明的标识符错误,objective-c,ios,nsarray,undeclared-identifier,Objective C,Ios,Nsarray,Undeclared Identifier,我的.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,

我的.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*ImagesView在一个方法内,它就可以正常工作,但我不能在方法外声明它,以便它对所有方法都可用。作为一个Objective-C新手,我不知道接下来该怎么做。非常感谢您的帮助。

您不必在方法外部初始化数组,就可以从所有方法访问它。您应该做的是将它声明为属性,并在
viewDidLoad
方法中初始化它

.h
文件中:

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

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

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

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


另外,请注意,因为您有40个图像视图,所以可能应该避免为每个视图声明属性。您可以将标记分配给它们,然后使用方法
viewWithTag

检索它们。您不必在方法外部初始化数组,就可以从所有方法访问它。您应该做的是将它声明为属性,并在
viewDidLoad
方法中初始化它

.h
文件中:

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

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

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

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

另外,请注意,因为您有40个图像视图,所以可能应该避免为每个视图声明属性。您可以将标记分配给它们,然后使用标题中的方法
viewWithTag

检索它们:

@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
在标题中:

@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

你能看一下你的.m文件吗?用
self.imgX
代替
imgX
来填充数组吗?你能看一下你的.m文件吗?用
self.imgX
代替
imgX
来填充数组值得注意的是,如果这应该用ARC编译。谢谢。这现在起作用了——我仍然真正掌握了自我的正确用法。谢谢你建议我使用这些标签,但我现在很难接受。一旦我让应用程序运行起来,我可能会回来。@MrTJ-OP使用的是
weak
properties,所以我假设他使用的是ARC。值得注意的是,如果这应该用ARC编译。谢谢。这现在起作用了——我仍然真正掌握了自我的正确用法。谢谢你建议我使用这些标签,但我现在很难接受。一旦应用程序正常运行,我可能会回来。@MrTJ-OP使用的是
weak
properties,因此我假设他使用的是ARC。如果需要在类之外使用ImageView,也可以使用properties。如果需要在类之外使用ImageView,也可以使用properties。