2012/05/08更新

[XCODE] NSIndexPathとは?作り方や使い方も

このエントリーをはてなブックマークに追加            

今日は、iPhoneアプリ開発ネタでNSIndexPathを扱いたいと思います。
UITableViewなどを使うと、メソッドの引数などに頻繁に登場するNSIndexPath。 最初はなかなかなじめなかったNSIndexPath君。最近やっと扱えるようになったので、 その使い方や作り方をブログに記載したいと思います(*゚▽゚)ノ

What is NSIndexPath



NSIndexPathとは

NSIndexPathとは何か、これがなかなか最初理解出来なかった。
Indexという文字があるので、番号を示しているんです。一番分かりやすい説明は、 「アウトライン上の位置情報」でした。
例えば、以下のようなアウトラインを例に説明します。
  • 1章
    • 1-1節
    • 1-2節
    • 1-3節
  • 2章
    • 2-1節
    • 2-2節 ☆
  • 3章
    • 3-1節
    • 3-2節
    • 3-3節
上記の「☆」印部分は、2セクション目の2行目が位置情報となります。
Objective-Cは添字は0から始まりますので、NSIndexPathで表すと、「section=1, row=1」を保持する NSIndexPathとなります。
なお、NSIndexPathが保持できる階層は2階層より深い階層も持てますが、iOSで使う場合の多くは、2階層までで 十分のため、上記の例で記載致しました。




NSIndexPathの作り方、使い方(iOS限定)

NSIndexPathの作り方と使い方を記載します。 ここで記載している方法は、iOS用に拡張されたNSIndexPathであり、MaxOSでは使えませんので、ご注意ください。 詳細は、NSIndexPath UIKit Addtionsを参照ください。

作り方は、簡単です。作成したいセクションと行を指定して、NSIndexPathを作成出来ます。
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:1 inSection:1];
上記例では、2セクション目の2行目を指すNSIndexPathとなります。

続いて、NSIndexPathの使い方ですが、セクションと行をそれぞれ別々に取得出来ます。
// indexPathは上記で作成したindexPath
int section = indexPath.section;
int row = indexPath.row;
NSLog("section=%d, row=%d", section, row); // section=1, row=1
iOS用に拡張されたNSIndexPath(*1)は、このように便利に使うことが出来ます。
*1 「section」「row」プロパティと「indexPathForRow:inSection:」メソッドが追加されています。




最後に

NSIndexPathはなかなかとっつきづらいですが、使えるようになると便利なものと感じています。
今後も活用して、またブログに書ける有益な情報があれば記載したいと思います。
最後までお読み頂きましてありがとうございました。






こんな記事もいかがですか?

RSS画像

もしご興味をお持ち頂けましたら、ぜひRSSへの登録をお願い致します。