Vì vậy, tôi đang cố gắng cập nhật một ô có hình ảnh đến. Tôi có một giao thức gọi lại phương thức tương ứng khi hình ảnh DLing được thực hiện. Nguồn của UITable là một NSArray của các đối tượng "Meeting". Mỗi Hội nghị nắm giữ indexPath ô trong bảng của nó mà tôi nhận được tại một -iphone UITable reloadRowsAtIndexPaths vấn đề rất lạ
(UITableViewCell *)tableView:(UITableView *)_tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
Meeting * meeting = [tableDataSource objectAtIndex:indexPath.row];
... cell's init code
meeting.cellPath = indexPath; // also tried [indexPath copy];
...
}
vấn đề là khi tôi đang cố gắng để cập nhật di động với lưu trữ indexPath Im nhận được một lỗi lạ mà nói về một số mảng NSMutable mà tôi không có:
2012-07-20 20:15:18.007 MyNewbieApp[5734:207] meeting.cellPath = [row = 2,section = 0]
2012-07-20 20:15:18.705 MyNewbieApp[5734:207] meeting.cellPath = [row = 4,section = 0]
2012-07-20 20:15:18.728 MyNewbieApp[5734:207] meeting.cellPath = [row = 5,section = 0]
2012-07-20 20:15:18.730 MyNewbieApp[5734:207] downloadDidFinishDownloading <NSIndexPath 0x79456f0> 2 indexes [0, 5]
2012-07-20 20:15:18.732 MyNewbieApp[5734:207] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[NSMutableArray objectAtIndex:]: index 3 beyond bounds [0 .. 2]'
*** Call stack at first throw:
(
0 CoreFoundation 0x02c70b99 __exceptionPreprocess + 185
1 libobjc.A.dylib 0x02a6540e objc_exception_throw + 47
2 CoreFoundation 0x02c66695 -[__NSArrayM objectAtIndex:] + 261
3 UIKit 0x00556327 -[_UITableViewUpdateSupport(Private) _setupAnimationsForExistingVisibleCells] + 264
4 UIKit 0x00555b9b -[_UITableViewUpdateSupport initWithTableView:updateItems:oldRowData:newRowData:oldRowRange:newRowRange:context:] + 436
5 UIKit 0x003ab5d6 -[UITableView(_UITableViewPrivate) _updateWithItems:withOldRowData:oldRowRange:newRowRange:context:] + 1323
6 UIKit 0x003a7f03 -[UITableView(_UITableViewPrivate) _endCellAnimationsWithContext:] + 9179
7 UIKit 0x003974d3 -[UITableView reloadRowsAtIndexPaths:withRowAnimation:] + 56
8 MyNewbieApp 0x00017354 -[MeetingsVC downloadDidFinishDownloading:] + 174
9 MyNewbieApp 0x000173a6 -[MeetingsVC download:didFailWithError:] + 43
10 MyNewbieApp 0x00010e5f -[Meeting image] + 317
11 MyNewbieApp 0x00016f49 -[MeetingsVC tableView:cellForRowAtIndexPath:] + 2141
12 UIKit 0x0039ed6f -[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:withIndexPath:] + 619
13 UIKit 0x00394e02 -[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:] + 75
14 UIKit 0x003a9774 -[UITableView(_UITableViewPrivate) _updateVisibleCellsNow:] + 1561
15 UIKit 0x003a17ec -[UITableView layoutSubviews] + 242
16 QuartzCore 0x02619481 -[CALayer layoutSublayers] + 177
17 QuartzCore 0x026191b1 CALayerLayoutIfNeeded + 220
18 QuartzCore 0x026122e0 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 302
19 QuartzCore 0x02612040 _ZN2CA11Transaction6commitEv + 292
20 QuartzCore 0x02642ebb _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 99
21 CoreFoundation 0x02c51f4b __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 27
22 CoreFoundation 0x02be6b27 __CFRunLoopDoObservers + 295
23 CoreFoundation 0x02bafce7 __CFRunLoopRun + 1575
24 CoreFoundation 0x02baf350 CFRunLoopRunSpecific + 208
25 CoreFoundation 0x02baf271 CFRunLoopRunInMode + 97
26 GraphicsServices 0x0318000c GSEventRunModal + 217
27 GraphicsServices 0x031800d1 GSEventRun + 115
28 UIKit 0x0033baf2 UIApplicationMain + 1160
29 MyNewbieApp 0x00002034 main + 102
30 MyNewbieApp 0x00001fc5 start + 53
)
terminate called after throwing an instance of 'NSException'
vì vậy, mảng Chỉ mục của nó nằm ngoài ngoại lệ. Bởi tôi không có bất kỳ NSMutableArray trong đó có 3 yếu tố. Tất cả các mảng của tôi r lớn hơn nhiều. À, ngoại lệ xuất phát từ đây:
- (void)downloadDidFinishDownloading:(Meeting *)meeting
{
NSLog(@"downloadDidFinishDownloading %@",meeting.cellPath);
//NSLog(@"downloadDidFinishDownloading meeting.cellPath = [row = %d,section = %d]",meeting.cellPath.row,meeting.cellPath.section);
[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:meeting.cellPath] withRowAnimation:UITableViewRowAnimationNone];
meeting.delegate = nil;
}
- (void)download:(Meeting *)meeting didFailWithError:(NSError *)error{
[self downloadDidFinishDownloading:meeting];
}
Phương thức gọi lại này được gọi mỗi lần chụp hình DLing đã được thực hiện. Và nếu tôi sẽ chỉ bình luận dòng mã với reloadRowsAtIndexPaths - mọi thứ hoạt động tốt. Nếu không, tôi sẽ gặp lỗi. Nó có thể là gì? Tôi đã dành rất nhiều giờ nhưng nó vô ích ... Tôi chỉ không có một keo tất cả những gì về ... Và những gì thậm chí còn lạ hơn vấn đề đến luôn luôn với yếu tố thứ 5 :) khi tôi di chuyển nội dung của bảng lên. Và không có gì đặc biệt với phần tử thứ 5, tôi đã thử nó với một tập dữ liệu khác nhưng vấn đề vẫn tồn tại.
cập nhật: Lỗi/sự cố chỉ xảy ra khi mã gọi lại phương thức download:(Meeting *)meeting didFailWithError
. Nhưng nó vẫn có thông số cuộc họp tương tự mà tôi gửi đến downloadDidFinishDownloading
. Tôi cũng đã thử theo dõi:
- (void)download:(Meeting *)meeting didFailWithError:(NSError *)error{
[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:meeting.cellPath] withRowAnimation:UITableViewRowAnimationNone];
meeting.delegate = nil;
}
vì vậy, ứng dụng hiện chỉ bị treo trong phương pháp này khi tải lạiRowsAtIndexPaths.
tại sao bạn tải lại hàng nếu tải của bạn thất bại? có gì thay đổi trong hàng không? – moxy
có, nó dừng lại và ẩn các spinner và làm cho có thể nhìn thấy UILabel mà nói "DL err" – Stan