我需要动态创建一些UIScrollViews并用内容填充它们。这一切都很好,除非我将委托设置为self并平移列表时我得到了这个例外:
由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:' - [__ NSCFString scrollViewDidScroll:]:无法识别的选择器发送到实例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。如果不是这种情况,我会认为我自己弄乱了记忆,但现在我没有相同的控制。
我很难调试此问题,任何有关如何继续的帮助都将不胜感激
答案 0 :(得分:2)
D'呵。我显然在错误的地方寻找。视图控制器是通过.xib添加的,视图指向舞台上的子视图。但是我需要在主视图控制器中为视图控制器创建一个IBOutlet,以确保它保留在内存中。希望这可以帮助其他人解决类似问题:)