我正在尝试读取用户在文本字段中输入的产品名称,稍后将其添加到字符串中。只要用户只输入一个单词,这就可以正常工作,但当产品不止一个单词时,程序会崩溃。当我运行调试器时,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];
}
如何解决此问题?感谢。
答案 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];