1

述語を使用してコアデータ内のオブジェクトを検索しています。必要なオブジェクトを正常に見つけることができますが、そのオブジェクトの詳細ビューをプッシュできるように、そのオブジェクトのindexPathも取得する必要があります。現在、オブジェクトを取得するための次のコードがあります。

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    [fetchRequest setEntity:[NSEntityDescription entityForName:@"Ride" inManagedObjectContext:self.managedObjectContext]];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"title = %@ AND addressFull = %@", view.annotation.title, view.annotation.subtitle];
    [fetchRequest setPredicate:predicate];
    NSMutableArray *sortDescriptors = [NSMutableArray array];
    [sortDescriptors addObject:[[[NSSortDescriptor alloc] initWithKey:@"title" ascending:YES] autorelease]];
    [sortDescriptors addObject:[[[NSSortDescriptor alloc] initWithKey:@"addressFull" ascending:YES] autorelease]];
    [fetchRequest setSortDescriptors:sortDescriptors];
    [fetchRequest setReturnsObjectsAsFaults:NO];
    [fetchRequest setPropertiesToFetch:[NSArray arrayWithObjects:@"title", @"addressFull", nil]];
    NSError *error = nil;
    NSArray *fetchedItems = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];
    // Sohow what record we returned
    NSLog(@"%@",[fetchedItems objectAtIndex:0]);

したがって、オブジェクトを正しく配列に入れることができます。 しかし、どうすればそのオブジェクトをindexPathに変換できますか?

4

1 に答える 1

2

インデックス パスは単なる一連のインデックスです。たとえば{0, 2}、配列データのテーブル ビュー表現が最終的な目標であると仮定すると、テーブル ビューの最初のセクションと 3 行目を指すインデックス パスを表す場合があります。

そのインデックス パスは、パスを配列のインデックスに変換する方法に応じて、配列内の特定のオブジェクトを指す可能性があります。

任意のインデックス パスを作成する場合は、非常に簡単です。

NSUInteger myFirstIndex = 0;
NSUInteger mySecondIndex = 2;
NSUInteger myIndices[] = {myFirstIndex, mySecondIndex};
NSIndexPath *myIndexPath = [[NSIndexPath alloc] initWithIndexes:myIndices length:2];
// ...do someting with myIndexPath...
[myIndexPath release];

したがって、配列構造がセクションと行にどのように変換されるかを理解する必要があります (ここでも、テーブル ビュー表現を作成する場合を想定しています)。

もう 1 つのオプションは、 を使用しNSFetchedResultsControllerてテーブル ビューの更新を処理することです。これは、セクションの分割方法に応じて、インデックス パスを処理します。

于 2010-05-28T01:42:47.833 に答える