用谓词查询核心数据 - iPhone

时间:2009-06-19 17:17:59

标签: iphone

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

在谓词上使用apple文档,我将以下代码合二为一 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属性完全匹配,则搜索工作,并使用具有对象名称的单个单元格重新填充表格。如果我不搜索确切的名称,我最终没有结果。

有什么想法吗?

4 个答案:

答案 0 :(得分:15)

似乎iPhone不喜欢LIKE运营商。我用'contains [cd]'替换它,它按照我想要的方式工作。

答案 1 :(得分:5)

使用包含[cd]而不是like,并更改:

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

为:

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

答案 2 :(得分:1)

您是否尝试使用MATCH和正则表达式?只是想知道LIKE是否应该在iPhone上应该避免......

答案 3 :(得分:1)

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

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

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