2012-02-18 8 views
6

Przed iOS5 byłem w stanie uzyskać dostęp do UIWebView w UIScrollView delegata tak:Dlaczego nie mogę już przechowywać właściwości delegata UIScrollView 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; 
    } 
} 

Teraz wiem, że nie jest to dobry sposób, żeby to zrobić, ale w tym czasie (o ile zrozumiałem), że to tylko sposób na zrobienie tego. iOS 5, który uległ zmianie, więc staram się zrobić to tak: iOS 5

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

ale tak czy inaczej staram się to zrobić, to wartość mojego OldDelegate obiektu jest 0x0. To naprawdę ważne, że zachowuję tę wartość delegata, ale próbuję jak tylko mogę, właśnie otrzymuję 0x0.

Wszelkie pomysły?

nie używam ARC ...

+0

Po prostu pytanie, czy kiedykolwiek udało Ci się przesłać aplikację, która to zrobiła? Myślałem, że to zabronione przez Apple. Chcę zrobić coś podobnego, chociaż nie wiem, czy aplikacja zostanie odrzucona. –

+0

Tak, został zatwierdzony, ale teraz nadszedł czas na aktualizację i nie mogę go uruchomić, więc mam kłopoty ... – Lizza

+0

Dlaczego musisz zatrzymać swojego delegata? Jest to dowód na większy problem w sposobie konstruowania hierarchii widoków. Delegaci zawsze powinni być uznani za słabych, ponieważ zatrzymanie ich nie ma sensu. – Sam

Odpowiedz

0

Tak, jeśli za pomocą łuku, jego możliwe, że jego sposób zbierania śmieci na niezatrzymany Olddelegate, można oznaczyć plik do nie korzystania z łuku -fno- objc-arc i zajmuj się zatrzymaniem i wydaniem na własną rękę, tak jak kiedyś. Lub możesz zaimplementować silne referencje, jak opisano tutaj, aby pomóc ci zachować zmienną. https://developer.apple.com/library/ios/#releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html

+0

Dzięki za odpowiedź, ale nie używam ARC ... – Lizza

+0

Czy Olddelegate jest własnością | @property (nonatomic, retain) NSObject * Olddelegate; –

+0

Tak, jest to właściwość – Lizza

1

Właściwość scrollView z UIWebView jest podklasą UIScrollView. Ta klasa prywatna o nazwie _UIWebViewScrollView nie używa właściwości delegate, zawsze jest zerowa. Może mógłbyś dokonać refaktoryzacji i uzyskać prawdziwego delegata z przewijaniem, ale jestem prawie w 100% pewien, że Apple odrzuci twoją aplikację.

Powiązane problemy