为什么我不能再存储UIWebView的UIScrollView委托属性了?

时间:2012-02-18 23:57:53

标签: iphone ios5 uiwebview uiscrollview uiscrollviewdelegate

在ios5之前,我能够像这样访问UIWebView的UIScrollView委托:

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 个答案:

答案 0 :(得分:1)

scrollView的{​​{1}}属性是UIWebView的子类。这个名为UIScrollView的私有类不使用_UIWebViewScrollView属性,它总是为零。也许你可以做一些重构并得到真正的scrollview-delegate,但我几乎100%肯定苹果会拒绝你的应用程序这样做。

答案 1 :(得分:0)

是的,如果你使用arc,它可能是你在未打开的Olddelegate上进行垃圾收集,你可以将文件标记为不使用带-fno-objc-arc的弧并像你一样处理你自己的保留和释放以前。或者,您可以实现此处所述的强引用,以帮助您保留变量。 https://developer.apple.com/library/ios/#releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html