Tips的な。 型の判別やUILabelの改行

結構、力技なところは否めません。
正式なやり方はいま一つ見つからなかったのと、
そこまで速度を求められないプログラムだったので妥協しました。



型の判別
 前回のplistに作ったNSDictionaryの場合、同じkeyで複数の値を持たせようと思ったら
 その要素を「array」型にして「string」を2個突っ込まなくてはいけませんでした。

<key>hoge</key>
<array>
 <string>hoge1</string>
 <string>hoge2</string>
</array>

 こんな感じで。
 そうすると、いざ使おうと思った時にNSStringかNSArrayかで処理を分ける必要が
 出てきましたので色々とやり方調べましたが、無かったのでこんな感じで判定してます。

※listはNSDictionaryです。
id tmp = [list objectForKey:value];
if([tmp classForCoder] == [NSString class]){
 ... NSStringの処理 ...
} else {
 ... NSArrayの処理 ...
}

取りあえずはこれで判定できたので。


※追記 11/03/17
多分、こちらの方が正式な判定方法

-(BOOL) isKindOfClass:(Class)aClass

【返り値】
   BOOL	YES/NO
【パラメータ】
   aClass	クラス

これを使って上の処理を書き換えると、

id tmp = [list objectForKey:value];
if([tmp isKindOfClass:[NSString class]]){
 ... NSStringの処理 ...
} else {
 ... NSArrayの処理 ...
}

このようになります。こちらの方がすっきりしてますね。



UILabelの改行
 これに関しては、良く言われるのは「numberOfLines」に「0」とか設定しておいて
 あとは中に「\n」(※バックスラッシュ、macでは「option+\」)を書けば改行出来るとか
 言われてますけど、plistから読みこんだら改行してくれなかったので。


 結構力技でやりました。
 取り合えずは置換用に、改行したいところに「\」を入れておいて
 NSStringのこれを使いました。

(NSString *)stringByReplacingOccurrencesOfString:(NSString *)target 
                                      withString:(NSString *)replacement

targetの文字列をreplacementの文字列に全て置換し、新しい文字列を作ります

target:置換対象になる文字列を指定します
replacement:置換する文字列を指定します

 具体的には、こんな感じで。

NSString text = [tmp stringByReplacingOccurrencesOfString:@"\" withString:@"\n"];
※withStringの「\」はバックスラッシュです。


 値を使う前にこういった変換かけてやれば、何とか改行されてくれました。