Tabs

iPhone&Androidのアプリ制作・デザイン

*

NSArray valueForkeypath関数

      2014/11/02


NSArrayやNSDictionaryを多用する人にお勧めです
CoreDataやSQLiteを使うとどうしてもNSArrayとNSDictionaryを多用することになると思うので、
ほとんど全員が対象です
NSArrayとNSDictionaryを多用するときは大抵がNSArrayの中にNSDictionaryがたくさん入っている形だと思います
例えばarrayというNSArrayオブジェクトにデータが入っているとします

(
        {
        name = "wicket";
        id = 1;
    },
        {
        name = "oyabunn";
        id = 2;
    },
        {
        name = "apple";
        id = 3;
    },
)

この中から「いきなりid=1のデータを取り出したい!」と言うとき、id順に並んでいると仮定してNSArrayの objectAtIndex 関数を使って取り出すと思います。もしこれを
「name = “apple” の人を取り出したい!」の場合は?

先ほどのように数値でもないし、nameの順で並んでいる訳ではないので難しいですよね?for .. in 構文を使ってまわして、名前が一致したら...と書かなければなりませんそんなときに便利なのが valueForKeyPath 関数
この関数を使うと、NSArrayに使うとそのキーのものだけを一覧で取り出してくれます具体的には[array valueForKeyPath:@”name”];
とすると、返り値は

(
     "wicket",
     "oyabunn",
     "apple"
)

となります

これを使えば
[[array valueForKeyPath:@”name”] indexOfObject:@”apple”];
で簡単にappleさんのデータが入ったIndex番号がわかります[array objectAtIndex:[[array valueForKeyPath:@”name”] indexOfObject:@”apple”]];
とかけば1行でappleさんのデータが取り出せますプログラムの簡略化はバグの発生率を下げますので、このような技術を使ってみてはいかがしょうか?
注意)
[array objectAtIndex:[[array valueForKeyPath:@”name”] indexOfObject:@”apple”]]
のままでは、appleさんのデータがなかったときに例外が投げられてエラーで終了します
appleさんのデータがあるかどうかを確認してくだい

 - Begin

  関連記事

no image
for文の便利な使い方

for文を使って繰り返し実行させる場合、基本的には数値を使ってループさせます。 …

eyechatch_xcode_tips-300x300
SNS連携

Twitter・Facebookとの連携は #import <Social …

no image
UILabelをコードで生成(Tips付)

Main Storyboard (IB)に用意されている Label を使わずに …

eyechatch_xcode_tips-300x300
LaunchImage 関連の設定

▼アプリ起動時のスプラッシュ画面 通常はチラっと一瞬だけ表示されるスプラッシュ画 …

no image
タッチイベント:有効・無効

// タッチイベントを有効にしたい場合の処理 [[UIApplication s …

eyechatch_xcode_tips-300x300
Xcode6 GameCenter 実装

Xcode6(iOS7以上)でのGameCenter実装 検索であまり見つからな …

eyechatch_xcode_tips-300x300
配列にNSNumberをぶちこむ

配列から数値を直に取り出したい場合はどうするのかと調べてみたのでメモ。 NSNu …

eyechatch_xcode_tips-300x300
UIViewの背景画像をフィットさせたい

UIViewは(UIImageViewとは違い)背景画像のサイズをフィットする機 …

no image
NSLog まとめ

デバッグする時などに、ログを出力する方法としてNSLogを使用します。 文字列を …

no image
UIViewを透明にする

// opaque属性にNOを設定する事で、背景透過を許可する。 UIView …