为什么编译器说我没有声明我的变量?

时间:2009-12-13 19:41:44

标签: objective-c cocoa

我在Xcode中收到一条错误,说“whatEverVariable未声明”这发生在.m文件内部,也发生在类本身之外。我已经在.h文件的花括号内声明了变量,并使用@property和@synthesize来访问变量。但是我有时会在.m文件中得到上面的错误,甚至在其他我已经#imported包含变量的类的类中。我在这里遗漏了一些关于Objective-C的东西或者什么?我想我要问的是,如果声明它们,为什么事情会被宣布为未宣布。

此外,我得到“按钮可能不会响应”setTitle“作为错误,因为这已被弃用或”setTitle:forState:“,因为我不想使用它。

我会发一个例子,但我真的觉得我在这里错过了一些明显的东西。有没有人对导致错误的原因有什么想法?很抱歉这么一般,但我必须是一个白痴或什么?

这是说“picturesInArray未声明”

#import <Foundation/Foundation.h> 
@interface Pictures : NSObject { 
    NSMutableArray *picturesInArray; 
} 

@property (nonatomic, retain) NSMutableArray *picturesInArray; 

-(IBAction)pictureButtonPressed:(id)sender; 

@end 


#import "Pictures.h" 
@implementation Pictures 

@synthesize picturesInArray; 

-(IBAction)pictureButtonPressed:(id)sender { 

    if (pictureIndex >= [picturesInArray count] || pictureIndex < 0) { 
        pictureIndex = 0;    

        [imageView setImage:[picturesInArray objectAtIndex:pictureIndex]]; 

        [imageView setNeedsDisplay]; 
    }    
}

3 个答案:

答案 0 :(得分:2)

  

这是说“picturesInArray未声明”

你确定它不是说“pictureIndex未声明”吗?因为这是你所展示的代码中未声明的变量。

答案 1 :(得分:0)

您可以发布示例代码吗?

我的猜测是你没有声明whatEverVariable在某个时刻的对象/变量类型。确保标题如下所示:

MyClass.h:

@interface MyClass : NSObject 
{
    NSString* whatEverVariable;
}

@property(readwrite, assign) NSString* whatEverVariable;

@end

MyClass.m:

@implementation MyClass

//whatever methods

@synthesize whatEverVariable;

@end

请注意,在@property中,您再次声明变量的类型。

对于按钮,请确保它是NSButton类型。

另外,你有进口吗?这为NSButton等事情导入了很多标题。

答案 2 :(得分:-1)

这就是说“picturesInArray未声明”很抱歉将它放在“上面的评论中让它难以阅读!

#import <Foundation/Foundation.h> 
@interface Pictures : NSObject { 
    NSMutableArray *picturesInArray; 
} 

@property (nonatomic, retain) NSMutableArray *picturesInArray; 

-(IBAction)pictureButtonPressed:(id)sender; 

@end 


#import "Pictures.h" 
@implementation Pictures 

@synthesize picturesInArray; 

-(IBAction)pictureButtonPressed:(id)sender { 

    if (pictureIndex >= [picturesInArray count] || pictureIndex < 0) { 
        pictureIndex = 0;    

        [imageView setImage:[picturesInArray objectAtIndex:pictureIndex]]; 

        [imageView setNeedsDisplay]; 
    }    
}