0

我在 Obj-C 中从事一个项目,其中我有一个基类(ViewController)和一个派生类(MultiPlayer)。
现在我已经在基类中声明了某些变量和属性。
我的属性正在从派生类访问,但我无法访问变量(int、char 和 bool 类型)。
我对 Obj-C 完全陌生,所以我不知道出了什么问题。
我使用了 C 和 C++ 中使用的数据类型。
在 Obj-C 中是否有一些特定的方法来声明变量?
如果是这样,如何?

这是我的文件

视图控制器.h

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

@property (weak,nonatomic) IBOutlet UIImageView* backGroungImage;
@property (strong,nonatomic) IBOutlet UIImageView *blockView1;
@property (strong,nonatomic) IBOutlet UIImageView *blockView2;
@property (strong,nonatomic) IBOutlet UIImageView *blockView3;
@property (strong,nonatomic) IBOutlet UIImageView *blockView4;
@property (strong,nonatomic) IBOutlet UIImageView *blockView5;
@property (strong,nonatomic) IBOutlet UIImageView *blockView6;
@property (strong,nonatomic) IBOutlet UIImageView *blockView7;
@property (strong,nonatomic) IBOutlet UIImageView *blockView8;
@property (strong,nonatomic) IBOutlet UIImageView *blockView9;
@property (strong,nonatomic) UIImage *x;
@property (strong,nonatomic) UIImage *O;
@property (strong,nonatomic) IBOutlet UIImageView* back1;
@property (strong,nonatomic) IBOutlet UIImageView* back2;
@end

视图控制器.m

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController



int chooseTheBackground = 0;
int movesToDecideXorO = 0;
int winningArrayX[3];
int winningArrayO[3];
int blocksTotal[9] = {8,3,4,1,5,9,6,7,2};
int checkIfContentInBlocks[9] = {0,0,0,0,0,0,0,0,0};
char determineContentInBlocks[9] = {' ',' ',' ',' ',' ',' ',' ',' ',' '};
bool player1Win = false;
bool player2Win = false;
bool playerWin = false;
bool computerWin = false;

- (void)viewDidLoad
{
    [super viewDidLoad];
    if(chooseTheBackground==0)
    {
        UIImage* backImage = [UIImage imageNamed:@"MainBack1.png"];
        _backGroungImage.image=backImage;
    }
    if(chooseTheBackground==1)
    {
        UIImage* backImage = [UIImage imageNamed:@"MainBack2.png"];
        _backGroungImage.image=backImage;
    }

}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

我无法在派生类中使用上述声明的变量!

4

2 回答 2

1

您的所有变量都在@implementation您的类的私有中,如果您希望它们可以公开访问,请将它们放在您的 .h 文件中。

@interface ViewController : UIViewController {
    int chooseTheBackground;
    int movesToDecideXorO;
    int winningArrayX[3];
    int winningArrayO[3];
    int blocksTotal[9];
    int checkIfContentInBlocks[9];
    char determineContentInBlocks[9];
    bool player1Win;
    bool player2Win;
    bool playerWin;
    bool computerWin;
}
于 2013-10-20T03:50:31.037 回答
0

您可以在界面中声明您的 ivars,例如:

@interface MyViewController : UIViewController
{
    NSObject* _myObj;
}
@property(attributes) NSObject* myObj
@end

或实施:

@implementation MyViewController
{
    NSObject* _myObj;
}
@end

然后声明您的属性以使用变量(假设您需要/想要它们的属性)

您可以将变量分配给属性是这样的:

@implementation MyViewController
@synthesize myObj = _myObj; // this tells myObj property to use _myObj ivar
@end

如果您不指定自己的,则默认综合是使用带有下划线前缀的属性名称。

但是,您不需要访问子类中的变量;只需使用 . 直接访问属性self.property

如果您确实需要变量访问,例如如果一个属性是readonly,那么您必须知道在属性之外设置一个变量不会触发 KVO 通知,如果您需要 KVO,您必须手动执行此操作。

于 2013-10-20T04:28:55.517 回答