字符串问题

时间:2011-08-29 00:28:41

标签: objective-c ios xcode xcode4

来自菜鸟的一个非常愚蠢的问题。

我有一个动作,用于设置标签的字符串。

- (IBAction) changeProductText:(NSString *)str{ lblProductTxt.text = str; }

这是我想要设置的字符串:

TestText = [NSString stringWithFormat:@"Hi"];

这就是我这样做的方式:

[self.navigationController pushViewController:nextController animated:YES];

[nextController changeProductText:TestText];

我的问题是它不会将字符串设置为任何东西是随机进入字符串。当我点击它可能没有时,它可能会崩溃,所以我做错了。

3 个答案:

答案 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];