2009-06-19 23 views
10

Vì vậy, tôi đang cố tìm nạp các đối tượng từ dữ liệu lõi. Tôi có danh sách nói 80 ​​đối tượng và tôi muốn có thể tìm kiếm chúng thông qua UISearchBar. Chúng được hiển thị trong một bảng.Truy vấn dữ liệu cốt lõi có tính dự phòng - iPhone

Sử dụng tài liệu hướng dẫn táo về các biến vị ngữ, tôi đã đặt mã sau vào một phương pháp đại biểu 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]; 
} 

Nếu tôi gõ vào trường tìm kiếm một kết hợp chính xác với tên tài sản của một trong những đối tượng, việc tìm kiếm hoạt động, và nó phục hồi lại bảng với một tế bào duy nhất với tên của đối tượng. Nếu tôi không tìm kiếm tên chính xác, tôi sẽ không có kết quả.

Bất kỳ suy nghĩ nào?

+0

xin lỗi về việc thiếu định dạng trên mã, tôi quên thêm các thẻ mẫu mã – gburgoon

+0

Bạn có thể chỉnh sửa bài đăng của mình để định dạng mã chính xác ... – CMPalmer

Trả lời

15

Dường như iPhone không thích toán tử LIKE. Tôi đã thay thế nó bằng 'contains [cd]' và nó hoạt động theo cách tôi muốn.

1

Bạn đã thử bằng cách sử dụng MATCH và cụm từ thông dụng? Chỉ cần tò mò để xem nếu LIKE là cái gì đó nên tránh trên iPhone hay không ...

+1

Ya, kết quả khớp với ngoại lệ. Nó chỉ là lẻ vì táo sử dụng toán tử LIKE rất nhiều trong tài liệu của họ, nhưng nó không hoạt động theo cách nó nói nó nên. – gburgoon

5

sử dụng chứa [cd] thay vì như thế, và sự thay đổi:

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

tới:

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

1

Trong điển hình ứng dụng Core Data ta nên xóa NSF fetchedResultsController:

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

Hoặc nếu không bạn sẽ nhận được một ngoại lệ (lý tưởng) hoặc bạn sẽ có hành vi lạ.

Các vấn đề liên quan