iOS - как обрабатывать конкатенацию строк, когда значение может быть ноль?

Я делаю что-то вроде этого:

NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];

NSString *var1 = [standardUserDefaults objectForKey:@"obj1"];
NSString *var2 = [standardUserDefaults objectForKey:@"obj2"]; 

EmailUtil *email_obj = [[EmailUtil alloc] initWithSubject:@"Some subject" body:[[[@"This is var1: " stringByAppendingString: var1] stringByAppendingString:@" and var2: "] stringByAppendingString: var2]]; 

[email_obj send]; 

Где EmailUtil - это просто мой собственный служебный класс, который отправляет электронную почту. Этот код отлично работает, когда строки var1 и var2 не равны nil; однако, если они равны нулю, программа завершится сбоем. Каким было бы элегантное решение или хорошая практика, чтобы гарантировать, что электронное письмо будет отправлено без проблем, независимо от того, какие значения?

Спасибо!

2 ответа

Решение

Перед вашей строкой EmailUtil просто добавьте:

if(var1==nil) var1 = @"";
if(var2==nil) var2 = @"";

Это должно решить проблему по крайней мере.

Другой и, возможно, лучший способ сделать это - использовать строку NSString stringWithFormat. Вместо:

[[[@"This is var1: " stringByAppendingString: var1] stringByAppendingString:@" and var2: "] stringByAppendingString: var2]

Делать:

[NSString stringWithFormat:@"This is var1: %@ and var2: %@", var1,var2];

Я полагаю, что он скажет (ноль) для параметров ноль (не проверял это). Это, вероятно, чище, чем у меня, и ваш оригинальный код тоже.

Ссылка: формат строки

Я бы соблазнился создать NSUserDefaults Категория с методом, который возвратил гарантированную строку, заменяя @"" на nil или, возможно, заданное вами значение по умолчанию. Это может быть излишним, если ваша единственная задача (когда-либо!) - две переменные, но это также может быть удобно для повторного использования.

Другие вопросы по тегам