Почему я не могу больше хранить свойство делегата UIWebView UIScrollView? - PullRequest
6 голосов
/ 19 февраля 2012

До ios5 я мог получить доступ к делегату UISWrollView UIWebView, как это:

for (id subview in webView1.subviews){
    if ([[subview class] isSubclassOfClass: [UIScrollView class]])  {
        UIScrollView * s = (UIScrollView*)subview;
        OldDelegate = s.delegate;//OldDelegate is type id
                    s.delegate = self;
    }
}

Теперь я знаю, что это не правильный способ сделать это, но в то время (насколько я понял)это был единственный способ сделать это.iOS 5 изменила это, поэтому я пытаюсь сделать это способом iOS 5:

UIScrollView * s = webView.scrollView;
Olddelegate = s.delegate;
s.delegate = self;

Но в любом случае я пытаюсь это сделать, значение моего объекта OldDelegate равно 0x0.Очень важно, чтобы я сохранил это значение делегата, но, как бы я ни пытался, я просто получаю 0x0.

Есть идеи?

Я не использую ARC ...

Ответы [ 2 ]

1 голос
/ 09 мая 2012

Свойство scrollView UIWebView является подклассом UIScrollView.Этот закрытый класс с именем _UIWebViewScrollView не использует свойство delegate, оно всегда равно nil.Может быть, вы могли бы провести некоторый рефакторинг и получить настоящий scrollview-делегат, но я почти на 100% уверен, что Apple откажется от вашего приложения.

0 голосов
/ 19 февраля 2012

Да, если вы используете arc, возможно, что он выполняет сборку мусора на вашем неподдерживаемом Olddelegate, вы можете пометить файл, чтобы он не использовал arc, с -fno-objc-arc и обрабатывать сохранение и выпуск самостоятельно, как выиспользовал к.Или вы можете реализовать сильные ссылки, как описано здесь, чтобы помочь вам сохранить переменную.https://developer.apple.com/library/ios/#releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html

...