0

我正在使用 XCode 3.2.6 并在我的 iPhone 4s 上进行测试。

我的应用程序在 UITableView 中显示产品列表。

我有一个设置了“sectionNameKeyPath”的 NSFetchedResultsController (NFC),所以我看到我的字母部分标题都很好。我想在我的 UISearchBar 中使用相同的控制器,但是当用户键入搜索项目时,我不想在后一种情况下显示部分标题。

有谁知道我是否可以重复使用相同的 NFC 并“关闭”sectionNameKeyPath 功能,还是需要使用单独的 NFC?

任何帮助都会很好,或者确实链接到可能显示它是如何完成的示例的链接。谢谢 - 罗南

4

1 回答 1

0

sectionNameKeyPath是只读的。因此,一种方法是在视图控制器上设置一个布尔搜索状态,如果您正在搜索,则该状态 == YES。然后 ...

// assuming ARC

- (void)setSearch:(BOOL)search {

    if (_search == search) return;
    _search = search;
    self.fetchedResultsController = nil;
}

这将导致您的 FRC 延迟初始化在下次请求时发生...

- (NSFetchedResultsController *)fetchedResultsController {

    if (_fetchedResultsController != nil) {
        return _fetchedResultsController;
    }

    // here's the key - set this based on search state
    NSString *sectionNameKeyPath = (self.search)? nil : @"mySectionNameKeyPath";

    _fetchedResultsController =
        [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
                                            managedObjectContext:moc
                                              sectionNameKeyPath:sectionNameKeyPath
                                                       cacheName:@"Root"];

    // and so on
}

感觉像是浪费查询来更改搜索模式,但希望这不会太昂贵。

于 2013-04-10T15:38:30.650 回答