【发布时间】:2011-11-25 13:11:12
【问题描述】:
我有一个刷新 UIScrollView 内容的网络。在 ScrollView 中有几个 UIImageView 和一些 UILabel。
我确实使用以下代码清理了滚动视图的内容:
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
我无法理解这里发生了什么。我遍历子视图(计数应该给我现有子视图的数量!?)。为什么索引会超出范围!?
【问题讨论】:
-
这很奇怪。您确定其他功能不会同时删除子视图吗?您确定没有其他可以影响此错误的源代码片段吗?
-
我现在正在浏览代码以检查它。到目前为止我找不到任何东西。
-
它总是在同一个子视图崩溃...
-
崩溃是您向我们展示的状态吗?与行 '[[publicationsScrollView.subviews objectAtIndex:i] removeFromSuperview];'注释掉了?
-
只是想知道
subviews objectAtIndex: removefromsuperviewAppStore 安全吗?
标签: objective-c ios indexoutofboundsexception