我有这段代码:
// Fill out the email body text
NSString *emailBody = (@"Name:%@\nNumber of People:\nDate:", name.text);
NSLog(@"%@", emailBody);
正如您所看到的那样,我试图在名称:"之后将name.text附加到电子邮件正文中。但是,NSLog仅输出name.text中包含的字符串,而不输出电子邮件正文的其余部分。我在这里做错了,代码删除了除name.text之外的其余字符串?
E.G如果name.text包含文本" Jack",那么NSLog只会输出" Jack"而不是:
Name: Jack
Number of People: x
Date: x
这就是我要找的。 p>
有谁能让我了解我做错了什么?
谢谢,
杰克答案 0 :(得分:12)
使用+ stringWithFormat方法:
NSString *emailBody = [NSString stringWithFormat:@"Name:%@\nNumber of People:\nDate:", name.text];
您现在拥有的是一个有效的代码,但它没有达到您想要的效果:
(@"Name:%@\nNumber of People:\nDate:", name.text);
调用一个逗号运算符 - 它会计算第一个参数,丢弃它并返回第二个参数,这就是emailBody
最终填充name.text
值的原因
答案 1 :(得分:0)
你应该写
NSString *emailBody = [@"Name:%@\nNumber of People:\nDate:" stringByAppendingString:name.text];
或者,如果它没有编译,
[[NSString stringWithString:@"Name:%@\nNumber of People:\nDate:"] stringByAppendingString:name.text]
答案 2 :(得分:0)
通常你想要像建议的那样使用stringWithFormat,它会创建一个遵循你所拥有的格式的自动释放字符串,或者你可以使用initWithFormat,这会创建一个你可以手动管理的字符串,以便在必要时获得更好的内存行为。
有些书会坚持认为,对于内存有限的iphone,你不需要依赖自动释放对象而不是绝对必要,所以你经常会发现这一点:
NSString *emailBody = [[NSString alloc] initWithFormat:@"Name:%@\nNumber of People:\nDate:", name.text];
然后您可以使用“emailBody”并在完成后立即使用,输入以下行:
[emailBody release];
这是一般养成的好习惯。