2012-10-10 80 views
0

我做這樣的事情: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不爲零時,此代碼正常工作;但是,如果它們爲零,程序將崩潰。不管值是什麼,確保電子郵件發送沒有問題,遵循什麼樣的優雅解決方案或好的做法?

謝謝!

+1

考慮使用'NSMutableString'(或'+ stringWithFormat:')來構建字符串。它會比許多嵌套的'stringByAppendingString:'調用導致更簡潔的代碼。 –

+0

@Mike Weller是的我不喜歡stringByAppendString的東西,但到現在如果覺得像最合理的解決方案。你會介意發佈一個片段,以便如何使用可變字符串?我只是不太熟悉它。 – GeekedOut

+2

'[NSString stringWithFormat:@「這是var1:%@,這是var2:%@」,var1,var2]'可能是您最好的選擇。 –

回答

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

我相信它會說(空)的無參數(沒有測試這一點)。這可能比我有的還要乾淨,也可能是你原來的代碼。

參考:String Format

+0

謝謝你 - 對你的兩點都適用! :) – GeekedOut

1

我很想創建一個NSUserDefaults的類別與返回的字符串保證,替代的方法@「」對零或者是您提供的默認值。如果你唯一的擔心(永遠!)是兩個變量,但它可能在重用時也很方便,這可能是過度的。