0

我正在做这样的事情:

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 不为零时,此代码可以正常工作;但是,如果它们为零,则程序将崩溃。什么是优雅的解决方案或良好的做法,以确保电子邮件发送没有问题,无论值是什么?

谢谢!

4

2 回答 2

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)(没有测试这个)。这可能比我所拥有的更干净,你的原始代码也是如此。

参考:字符串格式

于 2012-10-10T15:10:56.653 回答
1

我很想NSUserDefaults用返回保证字符串的方法创建一个类别,用 @"" 代替 nil 或者您提供的默认值。如果您唯一关心的(永远!)是两个变量,这可能是矫枉过正,但它也可能便于重用。

于 2012-10-10T15:17:04.863 回答