目标C:@property再次加载viewDidLoad后消失了

时间:2013-03-03 00:10:18

标签: objective-c variables properties

我是App Development的新手,正在开发我的第一个真正的应用程序。 我以为我理解了头文件中的属性变量,但我真的不知道这里发生了什么......我有一个解决方案,但不明白为什么会有效。

我从另一个ViewController传递了一个String,并在我的属性Variable:

中写了它

ViewController.h:

@property(weak, nonatomic) NSString *Gender;

现在我的viewDidLoad( ViewController.m )启动:

- (void)viewDidLoad{ [super viewDidLoad];

self.TestLabel.text = _Gender;  ...}

一切都很好,Label显示我的字符串。 但当我按下我的按钮“重置”(仍然是ViewController.m)时:

- (IBAction)ButtonReset:(id)sender { [self viewDidLoad] }

一切都像以前一样工作但我的标签是空的,它就像字符串不存在一样。

解决方案我想出了一些尝试:

在我的ViewController.m中添加一个全局变量

NSString *boygirl;

然后将原始代码更改为:

- (void)viewDidLoad{ [super viewDidLoad];   
boygirl = _Gender;
self.TestLabel.text = boygirl; ...}

... 为什么这样做?有更优雅的方式吗? 如果在我的原始代码中无法调用性别...为什么boygirl可以再次获得性别?

非常感谢!

1 个答案:

答案 0 :(得分:3)

您的属性被声明为“弱”,这意味着只要没有其他对该字符串的引用,您的属性就会设置为nil。听起来你的意思是“强大”。

此外,您不应该自己调用viewDidLoad,并且您的属性名称应该以小写字母开头。这些不是你问题的根源,但我认为很早就要学习好东西。