2012-02-18 12 views
6

:Neden bir UIWebView'ın UIScrollView delegesi özelliğini artık depolayamıyorum? Böyle bir UIWebView en UIScrollView temsilci erişmek mümkün oldu ios5 önce

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; 
    } 
} 

Şimdi, o bunu yapmak için doğru yol olmadığını biliyorum, ama (bildiğim kadarıyla anlamış gibi) zaman öyleydi Bunu yapmanın tek yolu. iOS 5 değiştirdi, o yüzden iOS 5 yolu yapmaya çalışıyorum:

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

Ama bunu yapmaya çalışacağım her iki şekilde, benim OldDelegate nesnenin değeri 0x0 olduğunu. Bu temsilci değerini korumam çok önemli, ama olabildiğince deneyin, sadece 0x0 alıyorum.

Herhangi bir fikrin var mı? Ben ARC kullanmıyorum

...

+0

Sadece bir soru, bunu yapan bir uygulamayı hiç gönderdiniz mi? Apple tarafından yasaklandığını düşündüm. Uygulamanın reddedilip reddedileceğini bilmeme rağmen benzer bir şey yapmak istiyorum. –

+0

Evet, onaylandı, ancak şimdi bir güncelleme zamanı geldi, ve çalışamam bu yüzden sorun yaşıyorum ... – Lizza

+0

Temsilcinizi neden korumanız gerekiyor? Bu, görünüm hiyerarşinizi oluştururken daha büyük bir sorunun kanıtıdır. Delegeler her zaman zayıf olduklarını beyan etmeli, çünkü onları tutmak anlamsızdır. – Sam

cevap

0

Evet, eğer kullanarak yay, onun mümkün sizin tutulmamıştır Olddelegate üzerindeki yapıyor çöp toplama, sen -fno- ile yayı kullanmayan dosyayı işaretleyebilir ya bu objc-arc ve tutun gibi tutun ve eskiden olduğu gibi kendi başına bırakın. Ya da değişkeni korumanıza yardımcı olması için burada açıklandığı gibi güçlü referanslar uygulayabilirsiniz. https://developer.apple.com/library/ios/#releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html

+0

Cevabınız için teşekkürler, fakat ARC kullanmıyorum ... – Lizza

+0

Olddelegate bir özelliktir | @ mülkiyeti (nonatomic, retain) NSObject * Olddelegate; –

+0

Evet, bu bir özellik – Lizza

1

UIWebView ait scrollView mülkiyet UIScrollView bir alt sınıfıdır. Bu özel sınıf, _UIWebViewScrollView olarak adlandırılan delegate özelliğini kullanmaz, her zaman sıfırdır. Belki bazı refactoring yapmak ve gerçek scrollview-delegate olsun, ama neredeyse% 100 eminim Apple bunu uygulamanızı reddeder.