我有一個方法來刷新UIScrollView的內容。在ScrollView中有幾個UIImageViews和一些UILabels。IndexOutOfBounds通過子視圖循環?
我做清潔滾動視圖的內容與下面的代碼:
for (int i = [publicationsScrollView.subviews count] -1; i>=0; i--) {
NSLog(@"Deleting SubView: %@", [[publicationsScrollView.subviews objectAtIndex:i] class]);
if ([[publicationsScrollView.subviews objectAtIndex:i] isKindOfClass:[UIButton class]] || [[publicationsScrollView.subviews objectAtIndex:i] isKindOfClass:[UIButtonLongTap class]] || [[publicationsScrollView.subviews objectAtIndex:i] isKindOfClass:[UILabel class]] || [[publicationsScrollView.subviews objectAtIndex:i] isKindOfClass:[UIImageView class]]) {
NSLog(@"Deleting SubView: %@", [[publicationsScrollView.subviews objectAtIndex:i] class]);
[[publicationsScrollView.subviews objectAtIndex:i] removeFromSuperview];
}
if ([[publicationsScrollView.subviews objectAtIndex:i] isKindOfClass:[iCarousel class]]) {
NSLog(@"carousel: View is in Scrollview");
}
}
此代碼運行良好了一些日子。現在我在控制檯刷新期間收到一個錯誤:
refreshWorkSpace: deleting all subviews (11)
2011-11-25 14:04:52.826 CatalogService[45054:fb03] Deleting SubView: UILabel
2011-11-25 14:04:52.827 CatalogService[45054:fb03] Deleting SubView: UILabel
2011-11-25 14:04:52.839 CatalogService[45054:fb03] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 10 beyond bounds [0 .. 9]'
*** First throw call stack:
(0x1e8c052 0x231fd0a 0x1e78db8 0x6945 0x5826 0x1e8dec9 0xddc5c2 0xddc55a 0xe81b76 0xe8203f 0xe81bab 0xecfa99 0xed1407 0xe0193f 0xe01c56 0xde8384 0xddbaa9 0x28b6fa9 0x1e601c5 0x1dc5022 0x1dc390a 0x1dc2db4 0x1dc2ccb 0x28b5879 0x28b593e 0xdd9a9b 0x2e6d 0x2de5 0x1
我不明白這裏發生了什麼。我循環通過子視圖(計數應該給我現有子視圖的數量!?)。爲什麼指數會超出界限!
這很奇怪。你確定子視圖不會被其他函數同時刪除嗎?你確定沒有其他的源代碼片段可以影響這個bug嗎? – Piotr
我正在通過代碼爬行來檢查。到目前爲止我找不到任何東西。 – MadMaxAPP
它總是在相同的子視圖上崩潰... – MadMaxAPP