2012-01-17 6 views
0

NSIndexPathsを取得する際に少し奇妙なことがあり、わかりやすい読者が説明できることを望んでいました。NSIndexPathでUITableViewとNSFetchedResultsControllerを確認する

基本的なシナリオはUITableViewです。データはNSFetchedResultsControllerを経由します。拡張/折りたたみセクションを達成するためのいくつかのアプローチを試しています.Eg、テーブルビューは最初はセクションヘッダービューのみを表示しています。ユーザーがセクションヘッダーをタップすると、そのセクションの行がtableViewに挿入されます。

これは期待どおりに機能しません。実行可能なsectionIndexを渡しており、セクションにモデル内に少なくとも1つの既存の行があるとします。 、デバッガを見たときに、私は渡している部分は、1行を持っている、と仮定すると

- (void)expandSectionWithIndex:(NSInteger)sectionIndex 
{ 

NSIndexPath *pathToFirstRow = [NSIndexPath indexPathForRow:0 inSection:sectionIndex]; 
Child *aChild = [[self fetchedResultsController] objectAtIndexPath:pathToFirstRow]; 
NSSet *siblingGroup = [[aChild parent] children]; //assume we get a set of children 

//logged here, pathToFirstRow = [1, 0]; 

NSMutableArray *pathsToInsert = [[NSMutableArray alloc] init]; 

for (Child *childToInsert in siblingGroup) 
    { 
    NSIndexPath *insertionPath = [[self fetchedResultsController] indexPathForObject:childToInsert]; 
    [pathsToInsert addObject:insertionPath]; 
    //logged here insertionPath = [0, 1]; 
    } 

[[self tableView] beginUpdates]; 
[[self tableView] insertRowsAtIndexPaths:pathsToInsert withRowAnimation:UIViewAnimationTop]; 
[[self tableView] endUpdates]; 
} 

を私aChildとchildToInsert:説明のために、我々は2つのカスタム管理オブジェクトクラスを持っている(のは親&子それらを呼びましょう)なぜなら、NSFetchedResultsController内の同じオブジェクトに対してindexPathが返されてログに記録されるときに、別のものが返されるからです。内部にはループがありますか?

私はダースの回避策を考えるが、何私が知りたいのは、私はそれがためのループの働きに関係していると考える理由は...

答えて

0

であることができます。実際には、ループ専用のchildToInsertのインスタンスを作成しています。私はこの文脈で、返されたindexPathがこのオブジェクトの予測不可能であると仮定します。

+0

デバッガに表示されているとおり、私の* aChildと* childToInsertは同じNSManagedObjectインスタンスを指しています。私の推論では、fetchedResultsControllerがそのオブジェクトのindexPathのために照会されると、同じオブジェクトのindexPathは、その呼び出しがループの内側か外側かにかかわらず一様でなければなりません。これはあなたが正しくないかもしれないと言っているわけではない、それはちょうど私に意味をなさない。 – isaac

+0

実際にポインタアドレスを比較しましたか? – Mundi

関連する問題