iOS - 如果值为nil,如何处理字符串连接?

时间:2012-10-10 15:08:54

标签: ios ios5 string-concatenation

我正在做这样的事情:

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 个答案:

答案 0 :(得分: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];

我相信它会对nil参数说(null)(没有测试这个)。这可能比我的原始代码和原始代码更清晰。

参考:String Format

答案 1 :(得分:1)

我很想创建一个NSUserDefaults类别,其方法返回一个保证字符串,用@“”代替nil或者你提供的默认值。如果您唯一关心的问题(永远!)是两个变量,但它可能也很方便重复使用,这可能有点过头了。