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がnilでない場合に正常に機能します。ただし、それらがnilの場合、プログラムはクラッシュします。値が何であるかに関係なく、電子メールが問題なく送信されることを保証するために従うべきエレガントな解決策または良い習慣は何でしょうか?

ありがとう!

4

2 に答える 2

2

EmailUtil行の前に、次を追加するだけです。

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

これで少なくともクラッシュは解決するはずです。

もう1つの、おそらくより良い方法は、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または指定したデフォルト値を@""に置き換えます。あなたの唯一の関心事(これまでに!)が2つの変数である場合、それはやり過ぎかもしれませんが、再利用にも便利かもしれません。

于 2012-10-10T15:17:04.863 に答える