目标 - C新秀NSString问题

时间:2011-06-08 13:26:33

标签: iphone objective-c ios string

我有这段代码:

// 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

这就是我要找的。

有谁能让我了解我做错了什么?

谢谢,

杰克

3 个答案:

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

这是一般养成的好习惯。