Iboutlet连接但仍然说它是空的

时间:2010-12-14 22:41:09

标签: iphone iboutlet

我是iPhone开发的新手,并且正在练习一下。我将我通过IB制作的uilabel连接到我的代码中的IBOutlet,正如许多教程所说,但是在尝试设置它的文本时,它仍然说它是空的?我在我的.h类中定义了IBOutlet对象并通过IB很好地连接它没有问题,但idk为什么它仍然是null。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

好的,首先,让我们删除一些无关紧要的东西,并专注于你需要的核心。

#import "CalculatorBrain.h"

@interface CalculatorViewController : UIViewController 
{
    CalculatorBrain* _calculatorModel;
    UILabel *display;
}

- (IBAction) digitPressed:(UIButton *)sender;

@property (nonatomic, retain) IBOutlet UILabel *display;

@end


#import "CalculatorViewController.h"

@implementation CalculatorViewController
@synthesize display;

- (void)dealloc
{
    [display release], display = nil;
    [_calculatorModel release];
    [super dealloc];
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    if (! _calculatorModel)
    {
        _calculatorModel = [[CalculatorBrain alloc] init];
    }
}

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    NSLog(@"display is: %@", display);
}

- (IBAction)digitPressed:(UIButton *)sender
{
    NSString *currentDigit = [[sender titleLabel] text];
    [display setText:[NSString stringWithFormat:@"%@", currentDigit]];
}

@end

让我们知道在InterfaceBuilder中设置标签(显示)和动作(digitPressed :)时会发生什么。

答案 1 :(得分:-2)

尝试更改您的属性以进行复制(或保留,但对于这种情况,复制更为惯用):

@property (copy) IBOutlet UILabel *display;

您的assign属性不会增加字符串的引用计数,因此无法保证在您需要它时它仍然存在。