2012-01-07 26 views
5

Tôi có một UITableView và trình lập lịch biểu đang chạy trong nền xóa bản ghi từ đối tượng dữ liệu bên dưới. Mỗi khi một đối tượng bị xóa, tôi muốn xem bảng để cập nhật cho phù hợp.Không thể xóa deleteRowsAtIndexPaths để hoạt động

Nhưng tôi tiếp tục nhận được thông báo lỗi gây phiền nhiễu này khi cố xóa hàng khỏi chế độ xem bảng.

* Chấm dứt ứng dụng do ngoại lệ uncaught NSInternalInconsistencyException, lý do:. "Path chỉ số không hợp lệ để sử dụng với đường dẫn UITableView Index truyền cho xem bảng phải chứa chính xác hai chỉ số xác định phần và hàng Vui lòng sử dụng các loại trên NSIndexPath trong. UITableView.h nếu có thể. "

Mã:

NSIndexPath *indexPath = [NSIndexPath indexPathWithIndex:0]; 
NSUInteger row = [indexPath row]; 

NSMutableArray* files = [[NSMutableArray alloc] initWithArray:fileNames]; 
[files removeObjectAtIndex:[indexPath row]]; 
[fileNames dealloc]; 
fileNames = [NSArray arrayWithArray:files]; 

//[self.fileNames removeObjectAtIndex:row]; 
[self.tableDraft deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] 
withRowAnimation:UITableViewRowAnimationFade]; 

PS: Tôi cũng đã cố gắng [tableView reloadData]; nhưng điều đó đã không mong muốn tác dụng phụ, tẩy xoá các chỉ số được lựa chọn.

Trả lời

21

Bạn đã cân nhắc theo lời khuyên của tin nhắn chưa? Đường dẫn chỉ mục của bạn không chứa cả hàng và thành phần phần. Sử dụng +[NSIndexPath indexPathForRow:inSection:] để tạo ra các đối tượng đường chỉ số, do đó nó có các thông tin xem bảng yêu cầu:

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0]; 
+4

+1 Tôi đồng ý ... nó mất nhiều thời gian để viết bài này trên SO hơn là để đọc các lỗi ... nó đặc biệt cho bạn biết phải làm gì và tại sao nó đang hủy bỏ ... –

+0

Cảm ơn im vẫn đang học – DevNull

2

Bạn cần phải sử dụng này:

NSIndexPath * indexPath = [NSIndexPath indexPathForRow: rowIndex inSection : sectionIndex];

0

Sử dụng như thế này

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:sender.tag-1 inSection:0]; 

CGRect rectOfCellInTableView = [objTableView rectForRowAtIndexPath:indexPath]; 

CGRect rectOfCellInSuperview = [objTableView convertRect:rectOfCellInTableView toView:[objTableView superview]]; 
Các vấn đề liên quan