【问题标题】:Use of undeclared identifier errors使用未声明的标识符错误
【发布时间】:2012-04-03 10:24:32
【问题描述】:

我的 .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 新手,我不知道从哪里开始。如有任何帮助,我将不胜感激。

【问题讨论】:

  • 可以看看你的 .m 文件吗?
  • 使用self.imgX而不是imgX来填充数组

标签: objective-c ios nsarray undeclared-identifier


【解决方案1】:

您不必在方法之外初始化数组以使其可从所有方法访问。您应该做的是将其声明为属性并在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 检索它们。

【讨论】:

  • 值得注意的是,如果这应该用 ARC 编译。
  • 谢谢。现在可以了-我仍然真正掌握了自我的正确用法。感谢您提出使用标签的建议,但目前我很难做到这一点。一旦我让应用程序正常工作,我可能会回来。
  • @MrTJ - OP 正在使用 weak 属性,所以我假设他正在使用 ARC。
【解决方案2】:

在标题中:

@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

【讨论】:

  • 如果你还需要在类的外部使用imageViews,你也可以使用属性。
猜你喜欢
  • 2013-03-12
  • 2014-08-04
  • 2020-05-05
  • 2019-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多