【问题标题】:how we can search all records using NSPredicate rather than setting fetchController nil?我们如何使用 NSPredicate 搜索所有记录而不是设置 fetchController nil?
【发布时间】:2012-11-02 10:33:44
【问题描述】:

我可以通过以下方式轻松显示UITableView 中的所有记录:

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

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription
                               entityForName:@"Memo" inManagedObjectContext:[appDelegate managedObjectContext]];
[fetchRequest setEntity:entity];

NSSortDescriptor *sort = [[NSSortDescriptor alloc]
                          initWithKey:@"memodate" ascending:NO];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]];

NSFetchedResultsController *theFetchedResultsController =
[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
                                    managedObjectContext:[appDelegate managedObjectContext] sectionNameKeyPath:nil
                                               cacheName:nil];
self.fetchedResultsController = theFetchedResultsController;

return _fetchedResultsController;

对于搜索记录,我正在执行此操作:

- (void)searchBar:(UISearchBar *)aSearchBar textDidChange:(NSString *)searchText {

if (self.searchBar.text ==nil || [self.searchBar.text isEqualToString:@""])
{
    self.fetchedResultsController=nil;
}
else
{
    NSPredicate *predicate =[NSPredicate predicateWithFormat:@"memodesc CONTAINS[cd] %@", self.searchBar.text];
    [_fetchedResultsController.fetchRequest setPredicate:predicate];

}

NSError *error = nil;
if (![[self fetchedResultsController] performFetch:&error]) {
    // Handle error
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
    abort();  // Fail
}

[self.tableView reloadData];}

如果 searchText 值为 nil 或 "",我的问题是搜索所有记录的正确方法是什么

我再次设置self.fetchedResultsController=nil; 以检索所有初始结果。

但我不认为这是正确的方法。应该可以用谓词吗?

更新:

它与这个谓词一起工作

        NSPredicate *predicate =[NSPredicate predicateWithFormat:@"1=1"];
        [_fetchedResultsController.fetchRequest setPredicate:predicate];

但是如果我使用这个,我的应用程序会崩溃:

NSPredicate *predicate =[NSPredicate predicateWithFormat:@"All"];
[_fetchedResultsController.fetchRequest setPredicate:predicate];

Unable to parse the format string "ALL"'

【问题讨论】:

    标签: iphone objective-c nspredicate nsfetchedresultscontroller nsfetchrequest


    【解决方案1】:

    很快:

    let predicate = NSPredicate(value: true)
    

    【讨论】:

      【解决方案2】:

      我知道这是一个旧线程,但无论如何......你也可以使用:

      [NSPredicate predicateWithFormat:@"TRUEPREDICATE"];
      

      Predicate format syntax in Apple's documentation

      【讨论】:

      • 这个答案应该用于某些方法,例如 CKQuery 初始化器不能有 nil 谓词
      • 这对我有用,而其他人没有。
      【解决方案3】:

      如果您想获取所有实体,只需将谓词设置为 nil。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-23
        • 2014-09-21
        • 2015-05-01
        • 2013-04-23
        • 1970-01-01
        相关资源
        最近更新 更多