0

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

我从另一个 ViewController 传递了一个字符串,并将它写在我的属性变量中:

视图控制器.h:

@property(weak, nonatomic) NSString *Gender;

现在我的 viewDidLoad ( ViewController.m ) 开始了:

- (void)viewDidLoad{ [super viewDidLoad];

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

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

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

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

我通过尝试提出的解决方案:

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

NSString *boygirl;

然后将我的原始代码更改为:

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

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

非常感谢你!

4

1 回答 1

3

您的属性被声明为“弱”,这意味着一旦没有其他对同一字符串的引用,您的属性将设置为 nil。听起来你的意思是“强壮”。

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

于 2013-03-03T00:20:14.640 回答