【问题标题】:Querying Core Data with Predicates - iPhone使用谓词查询核心数据 - iPhone
【发布时间】:2009-06-19 17:17:58
【问题描述】:

所以我试图从核心数据中获取对象。我有 80 个对象的列表,我希望能够使用 UISearchBar 搜索它们。它们显示在表格中。

使用关于谓词的苹果文档,我将以下代码放在一个 UISearchBar 委托方法。

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
  if (self.searchBar.text !=nil)
  {
    NSPredicate *predicate =[NSPredicate predicateWithFormat:@"name LIKE %@", self.searchBar.text];
    [fetchedResultsController.fetchRequest setPredicate:predicate];
  }
  else
  {
    NSPredicate *predicate =[NSPredicate predicateWithFormat:@"All"];
    [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];

    [searchBar resignFirstResponder];   
    [_shadeView setAlpha:0.0f];
}

如果我在搜索字段中键入与其中一个对象的 name 属性完全匹配的内容,则搜索会起作用,并且它会使用具有对象名称的单个单元格重新填充表格。如果我不准确搜索名称,我最终没有结果。

有什么想法吗?

【问题讨论】:

  • 抱歉代码中缺少格式,我忘记添加代码示例标签
  • 您可以编辑您的帖子以正确格式化代码...

标签: iphone


【解决方案1】:

似乎 iPhone 不喜欢 LIKE 运算符。我将它替换为“包含 [cd]”,它按我想要的方式工作。

【讨论】:

    【解决方案2】:

    使用 contains[cd] 代替 like,并更改:

    NSPredicate *predicate =[NSPredicate predicateWithFormat:@"All"];

    到:

    NSPredicate *predicate =[NSPredicate predicateWithFormat:@"1=1"];

    【讨论】:

      【解决方案3】:

      您是否尝试过使用 MATCH 和正则表达式?只是好奇看看是否应该在 iPhone 上避免使用 LIKE...

      【讨论】:

      • 是的,匹配会引发异常。这很奇怪,因为苹果在他们的文档中大量使用了 LIKE 运算符,但它并没有按照它所说的方式工作。
      【解决方案4】:

      在典型的 Core Data 应用程序中,应该删除 NSF fetchedResultsController:

      [NSFetchedResultsController deleteCacheWithName: [self.fetchedResultsController cacheName]];
      

      否则你会得到一个异常(理想情况下)或者你会有奇怪的行为。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-05
        • 1970-01-01
        • 2010-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-07
        • 1970-01-01
        相关资源
        最近更新 更多