Задача - C Новобранец NSString Задача - PullRequest
4 голосов
/ 08 июня 2011

У меня есть этот код:

// Fill out the email body text
NSString *emailBody = (@"Name:%@\nNumber of People:\nDate:", name.text);
NSLog(@"%@", emailBody);

Как видите, я пытаюсь добавить name.text в тело письма сразу после "Name:". Тем не менее, NSLog выводит только строку, содержащуюся в name.text, а не остальную часть тела письма. Что я делаю не так, когда код удаляет остальную часть строки, кроме name.text?

E.G, если name.text содержит текст «Джек», то NSLog выдаст только «Джек», а не:

Name: Jack
Number of People: x 
Date: x

Что я и ищу.

Может кто-нибудь дать мне представление о том, что я делаю неправильно?

Спасибо

Джек

Ответы [ 3 ]

12 голосов
/ 08 июня 2011

Использование метода + stringWithFormat:

NSString *emailBody = [NSString stringWithFormat:@"Name:%@\nNumber of People:\nDate:", name.text];

Теперь у вас есть действующий код, но он не выполняет то, что вы хотите:

(@"Name:%@\nNumber of People:\nDate:", name.text);

вызывает оператор запятой - он оценивает свой 1-й параметр, отбрасывает его и возвращает 2-й параметр, поэтому emailBody в конечном итоге заполняется name.text значением

0 голосов
/ 08 июня 2011

Как правило, вы хотите либо использовать stringWithFormat, как было предложено, что создает строку автоматического выпуска, которая соответствует формату, который у вас есть, либо вы можете использовать вместо него initWithFormat, который создает строку, которой вы можете вручную управлять для лучшего поведения памяти, если это необходимо.

некоторые книги будут настаивать на том, что для iphone, который имеет ограниченную память, вы не зависите от объектов автоматического освобождения больше, чем это абсолютно необходимо, поэтому вы часто найдете это вместо этого:

NSString *emailBody = [[NSString alloc] initWithFormat:@"Name:%@\nNumber of People:\nDate:", name.text];

Тогда вы можете использовать «emailBody» и сразу же после того, как с ним покончите, вставьте в эту строку:

[emailBody release];

В целом, это хорошая привычка.

0 голосов
/ 08 июня 2011

Вы должны написать

NSString *emailBody = [@"Name:%@\nNumber of People:\nDate:" stringByAppendingString:name.text];

Или, если он не компилируется,

[[NSString stringWithString:@"Name:%@\nNumber of People:\nDate:"] stringByAppendingString:name.text]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...