UITableViewで、現在の行の次の行や前の行を参照したい場合、NSIndexPathを自分で生成しないといけないのだろうなと思いつくわけですが、さてどうしたもんか。
調べると、こうすればよいという情報がそこここにあります。
NSIndexPath newPath = [NSIndexPath indexPathForRow:3 inSection:1];
この場合、2番目のセクションの4行目を表すNSIndexPath が出来ます。出来ますが。
indexなどと始まる名前のクラスメソッドの常で、これはファクトリクラスメソッドで、生成するインスタンスに対して内部でautoreleaseしてます。イベントなどでなんども発生するようなメソッド内で書くと、あっという間にメモリを食ってしまいます。なのでちゃんと自分でオーナーシップを握るようにしないといけません。
そもそもNSIndexPathって何だろうって話なのですが、一番判りやすい説明は「アウトライン上の位置情報」でした。
- 1章
- 1-1節
- 1-2節
- 1-2-3項
- 1-3節
- 2章
- 2-1節 #いまここ
- 2-2節
以下略
このいまここ、がNSIndexPath。階層は任意で決められます。UITableViewのDataSourceやDelegateのメソッドで扱ってるものは、UITableView用にカテゴリで拡張したもので、階層は2階層で固定、それぞれを表すsectionとrowというプロパティが追加されています。
なので自前で作るときはこうなります。
NSUInteger newIndex[] = {1, 3}; // 2番目のセクションの4行目
NSIndexPath newPath = [NSIndexPath alloc] initWithIndexes:newIndex length:2];
//ああだこうだの処理
[newPath release];
length: が階層ですね。これで自分でお掃除も出来ます。どうせならUITableView用に特化したイニシャライザも作ってくれればよかったのに。上の処理をラップすりゃ出来るんだし。



0 コメント:
コメントを投稿