Tôi đang đối mặt với một cơn ác mộng của một vụ tai nạn trong performBatchUpdates trên chế độ xem bộ sưu tập.Cơn ác mộng với tai nạn performBatchUpdates
Vấn đề về cơ bản là: Tôi có rất nhiều hình ảnh trên một thư mục trên máy chủ. Tôi muốn hiển thị hình thu nhỏ của những tệp đó trên chế độ xem bộ sưu tập. Nhưng hình thu nhỏ phải được tải xuống từ máy chủ không đồng bộ. Khi họ đến nơi, họ sẽ được đưa vào chế độ xem bộ sưu tập bằng cách sử dụng một cái gì đó như thế này:
dispatch_async(dispatch_get_main_queue(),
^{
[self.collectionView performBatchUpdates:^{
if (removedIndexes && [removedIndexes count] > 0) {
[self.collectionView deleteItemsAtIndexPaths:removedIndexes];
}
if (changedIndexes && [changedIndexes count] > 0) {
[self.collectionView reloadItemsAtIndexPaths:changedIndexes];
}
if (insertedIndexes && [insertedIndexes count] > 0) {
[self.collectionView insertItemsAtIndexPaths:insertedIndexes];
}
} completion:nil];
});
vấn đề là điều này (tôi nghĩ). Giả sử tại thời điểm = 0, chế độ xem bộ sưu tập có 10 mục. Sau đó tôi thêm 100 tệp nữa vào máy chủ. Ứng dụng sẽ thấy các tệp mới và bắt đầu tải xuống các hình thu nhỏ. Khi hình thu nhỏ tải xuống, chúng sẽ được chèn vào chế độ xem bộ sưu tập. Nhưng vì tải xuống có thể mất nhiều thời gian khác nhau và thao tác tải xuống này không đồng bộ, tại một thời điểm iOS sẽ mất theo dõi số lượng bộ sưu tập có và toàn bộ nội dung sẽ bị lỗi với thông báo khét tiếng thảm khốc này.
*** Chấm dứt ứng dụng do ngoại lệ còn tự do 'NSInternalInconsistencyException', lý do: 'cập nhật không hợp lệ: không hợp lệ số mục trong phần 0. Số lượng các mục chứa trong một phần hiện sau khi cập nhật (213) phải bằng số lượng mục có trong phần đó trước bản cập nhật (154), cộng hoặc trừ số mục được chèn hoặc xóa khỏi phần đó (40 được chèn, 0 đã xóa) và cộng hoặc trừ số lượng mục được chuyển vào hoặc ra khỏi phần đó (0 đã chuyển vào, 0 đã chuyển đi). '
Bằng chứng tôi có điều gì đó đang xảy ra là nếu tôi in tổng số mục trên tập dữ liệu tôi thấy chính xác 213. Vì vậy, tập dữ liệu khớp với số chính xác và thông báo là vô nghĩa.
Tôi đã gặp sự cố này trước đây, here nhưng đó là dự án iOS 7. Bằng cách nào đó, sự cố đã được trả về ngay trên iOS 8 và các giải pháp không hoạt động và giờ là tập dữ liệu IS IN SYNC.
Tôi đang phải đối mặt với cùng một vấn đề. Tôi sẽ thử giải pháp của bạn. – vmeyer