2012-05-31 29 views
6

Tôi đang có một tinh ranh của một thời gian nhận được toàn bộ dữ liệu cốt lõi này, Storyboard, bộ ba UISearchBar làm việc cùng nhau như nó cần. Cuối cùng đã xây dựng thành công bảng với Dữ liệu cốt lõi, thu hẹp các mục bằng Văn bản tìm kiếm và sửa đổi chuẩn bị, vẫn còn một dấu nhắc ...Rắc rối khi vượt qua indexPath.row với preparForSegue với UISearchBar

Khi tôi nhấp vào bất kỳ mục nào trong bảng để chuyển đến chế độ xem chi tiết, tất cả đều tốt trong bảng chưa được lọc. PrepareForSegue được gọi và chi tiết xuất hiện hoàn hảo.

Khi tôi tìm kiếm, bảng của tôi được lọc (Tôi sẽ lọc tùy chọn mảng cho bây giờ thay vì một NSFetchedResultsController thứ hai, nhưng không phải vì thiếu cố gắng!).

Khi tôi nhấp vào một mục trong danh sách được lọc, PrepareForSegue được gọi và chế độ xem chi tiết được đẩy, tuy nhiên, nó luôn lấy chi tiết từ mục đầu tiên trong danh sách!

Ví dụ: nếu tôi tìm kiếm "c" và danh sách được thu hẹp thành "Charlie" và "Cookie", khi tôi chọn "Charlie", tôi thấy chế độ xem chi tiết cho "Charlie". Khi tôi chọn "Cookie", thật không may, tôi cũng thấy chế độ xem chi tiết cho "Charlie"

Tôi đang giả định rằng mã preparForSegue là vấn đề (có thể không chính xác?). Đây là mã:

SampleTVC *sampleDetailTVC = segue.destinationViewController; 
    sampleDetailTVC.delegate = self; 

    // Store selected Role in selectedRole property 
    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; 
    // self.selectedRole = [self.fetchedResultsController objectAtIndexPath:indexPath]; 
    if (savedSearchTerm){ 
     self.selectedRole = [self.searchResults objectAtIndex:indexPath.row]; 
    } else { 
     self.selectedRole = [self.fetchedResultsController objectAtIndexPath:indexPath]; 
    } 
    NSLog(@"Passing selected role (%@) to SampleTVC", self.selectedRole.name); 
    sampleDetailTVC.role = self.selectedRole; 

Mọi trợ giúp sẽ được đánh giá cao!

+0

Khi bạn chọn "Cookie", có thể giúp bạn đăng nhập giá trị của 'self.searchResults' và' indexPath.row' tại thời điểm bạn nhận vai trò? –

+0

Khi tôi thêm: if (savedSearchTerm) { self.selectedRole = [self.searchResults objectAtIndex: indexPath.row]; NSLog (@ "tìm kiếm là gì:% @ indexpath là gì:% @", self.searchResults, indexPath.row); -------------------- Tôi nhận được những điều sau đây: searchresults: charlie, cookie [edited to shorten] indexpath là gì: (null) ----- I nghĩ rằng index.path (null) có thể là vấn đề? –

+0

và trên bảng không được tìm kiếm, nếu tôi đăng nhập indexPath tôi nhận được: đường dẫn chỉ mục là gì: 2 chỉ mục [0, 3] –

Trả lời

12

Nhờ Phillip Mills, đối với câu trả lời:

chỉ đơn giản là đã có thêm:

indexPath = [self.searchDisplayController.searchResultsTableView indexPathForSelectedRow]; 

đầy đủ mẫu:

SampleTVC *sampleDetailTVC = segue.destinationViewController; 
    sampleDetailTVC.delegate = self; 
    // Store selected Role in selectedRole property 
    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; 
    // self.selectedRole = [self.fetchedResultsController objectAtIndexPath:indexPath]; 
    if (savedSearchTerm){ 
     indexPath = [self.searchDisplayController.searchResultsTableView indexPathForSelectedRow]; 
    self.selectedRole = [self.searchResults objectAtIndex:indexPath.row]; 
    } else { 
     self.selectedRole = [self.fetchedResultsController objectAtIndexPath:indexPath]; 
    } 
    NSLog(@"Passing selected role (%@) to SampleTVC", self.selectedRole.name); 
    sampleDetailTVC.role = self.selectedRole; 
+0

Đừng quên bạn có thể chấp nhận câu trả lời của riêng bạn. –

+0

Cảm ơn !, nó sẽ không cho tôi thêm 17 giờ nữa ... :) –

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