Tôi đã triển khai ứng dụng iPhone sử dụng UITableViewController/UITableView và dữ liệu lõi. Hơn nữa, tôi sử dụng NSFetchedResultsController để quản lý dữ liệu bảng. Đây là tất cả rất thẳng về phía trước và hoạt động tuyệt vời. Sau đó tôi quyết định rằng tôi sẽ hiển thị một tin nhắn trong UITableView khi không có hàng nơi tìm thấy/lấy ra. Sau khi nghiên cứu điều này, có vẻ như cách tốt nhất (có lẽ là cách duy nhất) để làm điều này là trả lại một ô "giả" có chứa thông báo. Tuy nhiên, khi tôi làm điều này, tôi nhận được một chương trình khó chịu từ hệ thống thời gian chạy than phiền (và đúng như vậy) về sự không thống nhất của dữ liệu: "Cập nhật không hợp lệ: số phần không hợp lệ. Số phần chứa trong chế độ xem bảng ...". Đây là mã có liên quan: phản ứngHiển thị thông báo "Không tìm thấy hàng" trong UITableView với dữ liệu lõi
- (NSInteger) numberOfSectionsInTableView: (UITableView *)tableView
{
if ([[self.fetchedResultsController fetchedObjects] count] == 0) return 1;
return [[self.fetchedResultsController sections] count];
}
- (NSInteger) tableView: (UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if ([[self.fetchedResultsController fetchedObjects] count] == 0) return 1;
id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections] objectAtIndex: section];
return [sectionInfo numberOfObjects];
}
- (UITableViewCell *) tableView: (UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath
{
if ([[self.fetchedResultsController fetchedObjects] count] == 0) {
UITableViewCell *cell = [[UITableViewCell alloc] init];
cell.textLabel.text = @"No widgets found.";
return cell;
}
STCellView *cell = (STCellView *)[tableView dequeueReusableCellWithIdentifier: @"ShieldCell"];
[self configureCell: cell atIndexPath: indexPath];
return cell;
}
Tôi đã đọc từ câu hỏi tương tự và dường như tôi nên sử dụng
insertRowsAtIndexPaths: withRowAnimation:
để chèn "giả" hàng nhắn vào bàn của tôi. Tuy nhiên, điều này cũng có nghĩa là xóa hàng "giả" khi một hàng thực được chèn vào. Tôi có thể làm điều này, nhưng có vẻ như có một cách dễ dàng hơn để thực hiện việc này. Tất cả những gì tôi muốn làm là hiển thị một thông báo cho biết rằng không có hàng nào trong bảng (đủ đơn giản?). Vì vậy, câu hỏi của tôi là: Có cách nào để hiển thị một tin nhắn trong một UITableView mà không sử dụng cách tiếp cận "giả" tế bào HOẶC là có một cách để thuyết phục UITableViewController/NSFetchResulsController rằng đây chỉ là một hàng "giả" và họ không nên nhận được rất buồn vì nó không phải là một hàng thực (từ quan điểm của tôi) trong bảng?
Bất kỳ trợ giúp nào bạn có thể cung cấp sẽ rất được đánh giá cao (Tôi là một người mới gặp khó khăn trong việc phát triển iPhone và tôi muốn tìm hiểu các phương pháp hay nhất). Cảm ơn.
Thay vì hack với nguồn dữ liệu bảng để có được giao diện người dùng dự định tại sao không thêm thông báo "Không tìm thấy hàng" vào tiêu đề tableview thay vào đó? – Rog
@Rog Mẹo hữu ích. +1 –
Đây là cách tiếp cận tốt nhất nếu bạn chỉ có một phần trong chế độ xem bảng của mình. Xem cách tiếp cận của tôi dưới đây cho nhiều phần – Brett