我需要动态创建许多 UIScrollViews 并用内容填充它们。这一切都很好,除了当我将委托设置为 self 并平移列表时,我得到了这个异常:
由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[__NSCFString scrollViewDidScroll:]: unrecognized selector sent to instance 0x7581230”
NSCFString 显然不是我的视图控制器(它实现了 UIScrollViewDelegate 协议),所以从我收集到的内容中,内存被搞砸了,它不能正确地保持引用。有时这也可能是其他东西,强烈表明内存有问题
这是创建列表的代码:
for (NSUInteger i = 0; i < self.stories.currentStory.selectableWordCount; i++) {
UIScrollView *list = [[UIScrollView alloc] init];
list.alwaysBounceVertical = YES;
list.showsVerticalScrollIndicator = NO;
list.clipsToBounds = NO;
list.delegate = self;
list.pagingEnabled = YES;
[self.view addSubview:list];
.. // add UILabels to the list, set the frame, contentSize etc
[self.wordLists addObject:list]; // this is a @property (nonatomic, strong) NSMutableArray, declared in a private interface()
}
如果我 NSLog 代表它是正确的。respondsToSelector
也很匹配。有趣的是,如果我注释掉scrollViewDidScroll:
respondsToSelector:
不再匹配并且(可能正因为如此) UIScrollView 将不再尝试调用此方法。这意味着它可以正确地到达委托以检查方法的可用性,但是当它被调用时出现问题。
我的目标是带有 ARC 的 iOS5。如果不是这种情况,我会假设我自己弄乱了内存,但现在我没有相同的控制权。
我很难调试这个问题,任何关于如何继续的帮助将不胜感激