6

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を使用していません...

4

2 に答える 2

1

scrollViewプロパティUIWebViewは のサブクラスですUIScrollView。呼び出されるこのプライベート クラスはプロパティを_UIWebViewScrollView使用せず、delegate常に nil です。リファクタリングを行って実際の scrollview-delegate を取得できるかもしれませんが、アップルがそうすることでアプリを拒否することはほぼ 100% 確信しています。

于 2012-05-09T15:17:45.513 に答える
0

はい、arc を使用している場合、保持されていない Olddelegate でガベージ コレクションを実行している可能性がある場合は、-fno-objc-arc を使用して arc を使用しないようにファイルをマークし、以前のように自分で保持と解放を処理できます。または、変数を保持するために、ここで説明されているように強い参照を実装することもできます。https://developer.apple.com/library/ios/#releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html

于 2012-02-19T00:02:13.800 に答える