来自菜鸟的一个非常愚蠢的问题。
我有一个动作,用于设置标签的字符串。
- (IBAction) changeProductText:(NSString *)str{
lblProductTxt.text = str;
}
这是我想要设置的字符串:
TestText = [NSString stringWithFormat:@"Hi"];
这就是我这样做的方式:
[self.navigationController pushViewController:nextController animated:YES];
[nextController changeProductText:TestText];
我的问题是它不会将字符串设置为任何东西是随机进入字符串。当我点击它可能没有时,它可能会崩溃,所以我做错了。
答案 0 :(得分:1)
stringWithFormat为您提供了一种自动释放的格式,但没有看到更多的代码,我猜它正在点击自动释放池,而您正在尝试访问作为您的字符串的垃圾。
答案 1 :(得分:0)
IBAction
的唯一参数是发件人:
- (IBAction)clickMyButton:(id)sender;
字符串几乎不是某个操作的有效发件人,因此无论您设置为 lblProductTxt.text
,它都不是字符串,而是执行该操作的发件人。
在您的操作方法中,您当然可以设置 lblProductTxt.text
。你必须找到自己在哪里得到字符串。
根据您的评论我推断您没有 IBAction ,您只需要一个void方法。你对IBAction
的使用让我走错了路。声明如下:
- (void) changeProductText: (NSString *) newText;
忽略(IBAction)
指示符,因为这只是真正的IB动作方法所必需的。
无论您使用
NSString *testText = [NSString stringWithFormat: @"Hi"];
或
NSString *testText = [NSString stringWithString: @"Hi"];
结果 完全 相同:自动释放NSString
,文字为"Hi"
。只有它的创建方式略有不同。如果一个人工作而另一个人崩溃,那么同样的事情是错的,你很幸运它不会崩溃。
到目前为止,从你发布的内容中看不出什么是错的。
答案 2 :(得分:0)
这是陈述的确切顺序吗?
[self.navigationController pushViewController:nextController animated:YES];
[nextController changeProductText:TestText];
我不是100%肯定,但我相信在推送nextController之前不会执行第二行。 试着扭转它们。 (第一次创建并初始化nextController) 第二个分配要传递给nextController的所有值 第三个在View控制器堆栈上推送nextViewController。
[nextController changeProductText:TestText];
[self.navigationController pushViewController:nextController animated:YES];