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 の初心者として、私はここからどこへ行くべきかわかりません。助けていただければ幸いです。

4

2 に答える 2

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

于 2012-04-03T10:33:47.543 に答える
0

In the header:

@interface MyClass : NSObject {
    NSArray *imageViews;
}

@end

In the implementation:

@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
于 2012-04-03T10:39:40.923 に答える