@synthesize不起作用,基本操作在Objective-C中不起作用

时间:2009-11-03 02:07:15

标签: objective-c text integer label synthesizer

我不确定为什么这段代码不起作用。当我单击一个按钮(动作:buttonclick)时,它应该将两个文本框'(MyTextLabel和MyTextLabel2)文本增量值“r”改为1。这是代码:

MainView.h

#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>

@interface MainView : UIView {
    IBOutlet UIButton *MyButton;
    IBOutlet UILabel *MyTextLabel;
    IBOutlet UILabel *MyTextLabel2;
}

@property (nonatomic, retain) UIButton *MyButton;
@property (nonatomic, retain) UILabel *MyTextLabel;
@property (nonatomic, retain) UILabel *MyTextLabel2;


- (IBAction)buttonclick;
@end

MainView.m:

#import "MainView.h"
#include <stdlib.h>
#include <libc.h>

@implementation MainView

@synthesize MyButton, MyTextLabel, MyTextLabel2;

int r;

- (IBAction)buttonclick {
    r++
    if(r < 50) {
        MyTextLabel.text = @"< 50";
    }
    else {
        MyTextLabel2.text = @"=> 50";
    }
}
@end

5 个答案:

答案 0 :(得分:1)

我对你使用int r的方式感到有些不对劲。尝试将static int r;放在MainView.h中@interface行的顶部,并在- (IBAction)buttonclick;行下添加:

+(void) initialize;

然后从MainView.m中删除int r;。然后在MainView.m中添加:

+(void) initialize {
   count = 0;
}

答案 1 :(得分:1)

我看到两个问题:

  1. 您不能在int r声明您拥有它的地方。您应该在界面的变量块(您声明按钮和标签或方法之外)或方法定义中声明它。
  2. 带有r ++的行不以分号结束。

答案 2 :(得分:0)

你没有在你的问题中说出什么,确切地说,没有按照你期望的方式工作。我的猜测是你的网点实际连接不正确。您可能希望将日志语句添加到buttonClick,如下所示:

NSLog(@"button click called! MyTextLabel is %@", MyTextLabel);

重点是,确保它不是nil

答案 3 :(得分:0)

在Objective-C中,变量和属性的名称必须以小写字母开头,以符合键值编码(KVC)协议(总是myButton,而不是MyButton)。 @synthesize指令依赖于此来生成setter和getter。因此,myButton @synthesize会生成-(void)setMyButton:(UIButton *)button-(UIButton *)myButton

所以,请将MyButton及其同事小写,看看是否有帮助。

答案 4 :(得分:0)

Action方法总是有一个sender参数,所以你的-buttonClick:方法应该这样声明:

-(IBAction) buttonClick: (id)sender {
}