1

我需要动态创建许多 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。如果不是这种情况,我会假设我自己弄乱了内存,但现在我没有相同的控制权。

我很难调试这个问题,任何关于如何继续的帮助将不胜感激

4

1 回答 1

2

呃。我显然是找错地方了。视图控制器是通过 .xib 添加的,并且视图指向舞台上的子视图。但是我需要在主视图控制器中为视图控制器创建一个 IBOutlet,以确保它保留在内存中。希望这可以帮助其他有类似问题的人:)

于 2012-12-07T13:12:16.093 回答