无法从uitextfield读取多个单词

时间:2012-08-07 17:44:45

标签: objective-c

我正在尝试读取用户在文本字段中输入的产品名称,稍后将其添加到字符串中。只要用户只输入一个单词,这就可以正常工作,但当产品不止一个单词时,程序会崩溃。当我运行调试器时,NSString产品的值列为“变量不是nsstring”。输入产品名称后用户点击返回时会触发此方法:

-(IBAction)textFieldReturn3:(id)sender
{
    [sender resignFirstResponder];
    product = inputtext.text;
}

这是当用户在两个场景之后点击推特按钮时触发的方法的一部分(我的目标是当用户决定推特的内容时已经显示某个消息)[并且是,选择设置到0或3]

- (IBAction)twitter:(id)sender
{
TWTweetComposeViewController *twitter = [[TWTweetComposeViewController alloc] init];
[fmt5 setNumberStyle:NSNumberFormatterDecimalStyle];
[fmt5 setMaximumFractionDigits:2];
[fmt5 setMinimumFractionDigits:2];
if (choice == @"0" || choice == @"3")
{
    str = @"I just bought a new ";
    str = [str stringByAppendingString:product]; // line where it crashes
    str = [str stringByAppendingString:@" for $"];
    str = [str stringByAppendingString:[fmt5 stringFromNumber:[NSNumber numberWithDouble:myDouble]]];
    [twitter setInitialText:str];
}

如何解决此问题?感谢。

1 个答案:

答案 0 :(得分:3)

很多问题。让我们从实际原因开始。

product = inputtext.text;

不好。如果以后使用它,当您的视图已被解除分配时,其text属性将不再有效。你必须保留它以引用它。所以将上面的行更改为:

[product release];
product = [inputtext.text retain];

另外,请不要忘记将product初始化为nil以避免与第一次发布呼叫相关的崩溃。

其次,你的比较并不好。

choice == @"0" || choice == @"3"

没有做你认为的事情。使用

if ([choice isEqualToString:@"0"] || [choice isEqualToString:@"3"]) {

编辑:也是一个次要的设计点。不要通过顺序添加部分文本来重新发明轮子 - 这是非常难以理解的。浏览NSString的类引用,您很快就会找到以下方法:

str = [NSString stringWithFormat:@"I just bought a new %@ for $%.2lf", product, myDouble];