2012-12-07 34 views
1

我需要動態地創建一些UIScrollView並將其填充內容。這是除了當我設置委託自我和平移列表中我得到這個例外,所有的好:UIScrollView失去對委託的引用

終止應用程序由於未捕獲的異常「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。如果不是這種情況,我會假設我自己搞砸了記憶,但現在我沒有相同的控制。

我有一個很難調試這個問題,對如何進行任何幫助,將不勝感激

回答

2

D'呃。我顯然看錯了地方。視圖控制器通過.xib添加,視圖指向舞臺上的子視圖。不過,我需要在主視圖控制器中爲視圖控制器創建一個IBOutlet,以確保它保留在內存中。希望這可以幫助其他人有類似的問題:)

相關問題