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の「\」はバックスラッシュです。
値を使う前にこういった変換かけてやれば、何とか改行されてくれました。