2012-02-18 28 views
6

Trước ios5 tôi đã có thể truy cập vào UIScrollView đại biểu của một UIWebView như thế này:Tại sao tôi không thể lưu trữ thuộc tính ủy quyền UIScrollView của UIWebView nữa?

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

Bây giờ, tôi biết đó là không đúng cách để làm điều đó, nhưng đồng thời (như xa như tôi hiểu) đó là cách duy nhất để làm điều đó. iOS 5 đã thay đổi điều đó, vì vậy tôi đang cố gắng để làm điều đó một cách iOS 5:

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

Nhưng một trong hai cách tôi cố gắng để làm điều đó, giá trị của đối tượng OldDelegate của tôi là 0x0. Nó thực sự quan trọng là tôi giữ lại giá trị đại biểu này, nhưng cố gắng như tôi có thể, tôi chỉ nhận được 0x0.

Bất kỳ ý tưởng nào?

tôi không sử dụng ARC ...

+0

Chỉ là một câu hỏi, bạn đã bao giờ nhận được để gửi một ứng dụng đã làm điều đó? Tôi nghĩ rằng đó là bị cấm bởi Apple. Tôi muốn làm một cái gì đó tương tự mặc dù tôi không biết nếu nó sẽ nhận được các ứng dụng bị từ chối. –

+0

Vâng nó đã được chấp thuận, nhưng bây giờ là lúc để cập nhật, và tôi không thể làm cho nó hoạt động nên tôi gặp rắc rối ... – Lizza

+0

Tại sao bạn cần phải giữ lại đại biểu của bạn? Đây là bằng chứng của một vấn đề lớn hơn trong cách bạn đang xây dựng hệ thống phân cấp khung nhìn của bạn. Các đại biểu nên luôn luôn được tuyên bố yếu, vì giữ lại chúng không có ý nghĩa. – Sam

Trả lời

0

Vâng, nếu sử dụng hồ quang của bạn, nó có thể là làm thu gom rác thải trên Olddelegate unretained của bạn, bạn có thể đánh dấu các tập tin không sử dụng hồ quang với -fno- objc-arc và xử lý việc giữ lại và tự giải phóng như bạn đã từng sử dụng. Hoặc bạn có thể triển khai các tham chiếu mạnh mẽ như được mô tả ở đây để giúp bạn giữ lại biến. https://developer.apple.com/library/ios/#releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html

+0

Cảm ơn câu trả lời, nhưng tôi không sử dụng ARC ... – Lizza

+0

Là Olddelegate một tài sản | @property (nonatomic, giữ lại) NSObject * Olddelegate; –

+0

Có tài sản – Lizza

1

Thuộc tính scrollView của UIWebView là một phân lớp của UIScrollView. Lớp riêng tư này, được gọi là _UIWebViewScrollView không sử dụng thuộc tính delegate, nó luôn luôn là không. Có lẽ bạn có thể làm một số refactoring và nhận được scrollview-delegate thực, nhưng tôi gần như chắc chắn 100% táo sẽ từ chối ứng dụng của bạn làm như vậy.

Các vấn đề liên quan