iPhone:获取Predicate Object的indexPath

时间:2010-05-28 01:33:00

标签: iphone core-data predicate nsfetchrequest

我使用谓词在核心数据中查找对象。我可以成功找到我想要的对象,但我还需要获取该对象的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?

1 个答案:

答案 0 :(得分:2)

索引路径只是一组索引,例如{0, 2}可能表示指向表视图的第一部分和第三行的索引路径 - 假设数组数据的表视图表示是您的最终目标。

该索引路径可以指向数组中的任何特定对象,具体取决于您将路径转换为数组索引的方式。

如果你想制作一个任意的索引路径,那很简单:

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

所以你需要做的是弄清楚你的数组结构如何转换为部分和行(同样,假设你想要制作一个表视图表示)。

另一种选择是使用NSFetchedResultsController来处理表视图更新 - 它将为您处理索引路径,具体取决于您对部分进行分区的方式。