Objective c can';不能从uitextfield中读取多个单词

Objective c can';不能从uitextfield中读取多个单词,objective-c,Objective C,我试图读取用户在文本字段中输入的产品名称,然后将其添加到字符串中。当用户只输入一个单词时,这种方法可以很好地工作,但是当产品超过一个单词时,程序就会崩溃。当我运行调试器时,NSString产品的值列为“variable is not NSString”。当用户在输入产品名称后点击return时触发此方法: -(IBAction)textFieldReturn3:(id)sender { [sender resignFirstResponder]; product = inputt

我试图读取用户在文本字段中输入的产品名称,然后将其添加到字符串中。当用户只输入一个单词时,这种方法可以很好地工作,但是当产品超过一个单词时,程序就会崩溃。当我运行调试器时,NSString产品的值列为“variable is not NSString”。当用户在输入产品名称后点击return时触发此方法:

-(IBAction)textFieldReturn3:(id)sender
{
    [sender resignFirstResponder];
    product = inputtext.text;
}
这是两个场景后当用户点击twitter按钮时触发的方法的一部分(我的目标是在用户决定发什么时已经显示了某条消息)[是的,选项设置为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];
}

如何解决此问题?谢谢。

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

product = inputtext.text;
这不好。如果您以后使用它,当您的视图已被解除分配时,其文本属性将不再有效。您必须保留它才能引用它。因此,将上面的行更改为如下内容:

[product release];
product = [inputtext.text retain];
另外,不要忘记将
产品
初始化为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];