我是iPhone开发的新手,并且正在练习一下。我将我通过IB制作的uilabel连接到我的代码中的IBOutlet,正如许多教程所说,但是在尝试设置它的文本时,它仍然说它是空的?我在我的.h类中定义了IBOutlet对象并通过IB很好地连接它没有问题,但idk为什么它仍然是null。任何帮助将不胜感激。
答案 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
属性不会增加字符串的引用计数,因此无法保证在您需要它时它仍然存在。