代码之家  ›  专栏  ›  技术社区  ›  gburgoon

使用谓词查询核心数据-iPhone

  •  10
  • gburgoon  · 技术社区  · 17 年前

    所以我试图从核心数据中获取对象。我有大约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];
    }
    

    有什么想法吗?

    4 回复  |  直到 14 年前
        1
  •  15
  •   gburgoon    17 年前

    iPhone似乎不喜欢like运营商。我用“contains[cd]”替换了它,它按照我希望的方式工作。

        2
  •  5
  •   greenisus    17 年前

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

    致:

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

        3
  •  1
  •   CMPalmer    17 年前

        4
  •  1
  •   Nick    14 年前

    在典型的核心数据应用程序中,应删除NSF fetchedResultsController:

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

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