切换NSFetchedResultsController中的部分

时间:2013-04-10 14:56:20

标签: iphone xcode

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

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

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

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

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

1 个答案:

答案 0 :(得分: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
}

感觉浪费的查询可以改变搜索模式,但希望这不会太昂贵。

相关问题