Tôi cần chuyển một số thông tin bổ sung cùng với UIWebView loadRequest:
để nó đạt đến việc triển khai NSURLProtocol
của tôi. Thông tin không được ràng buộc với NSURLRequest
vì thông tin phải được giữ lại với NSURLRequest mainDocumentURL
. Vì vậy, tôi được phân loại là NSURL
và được xây dựng NSURLRequest
với nó. Tôi đã biết rằng NSURLRequest
đạt đến NSURLProtocol startLoading
KHÔNG phải là trường hợp tôi đã cấp cho UIWebView loadRequest
, vì vậy tôi cũng đã triển khai NSURL copyWithZone
, ngây thơ mong rằng hệ thống tải URL sẽ sử dụng nó.iOS: chuyển NSURL tùy chỉnh sang NSURLProtocol
Hiện tại, NSURLProtocol canInitWithRequest
được gọi là không một lần như mong đợi hợp lý, nhưng ít nhất 4 lần trước startLoading
. 2 lần đầu tiên trong số đó, số điện thoại NSURLRequest
đến vẫn chứa tùy chỉnh NSURL
tùy chỉnh của tôi. Sau đó, mã nội bộ không may được gọi là CFURLCopyAbsoluteURL
yêu cầu absoluteURL
tùy chỉnh NSURL
và canInitWithRequest
tiếp theo của chúng tôi (và sau đó startLoading
) đã nhận được NSURLRequest
hoàn toàn mới với NSURL
mới trong đó. copyWithZone
không bao giờ được gọi và số bị phân loại là NSURL
bị mất.
Trước khi tôi từ bỏ và thực hiện giải pháp kém và dễ vỡ khi gắn trực tiếp vào chuỗi URL, tôi muốn hỏi các trình thuật sĩ ở cấp cao hơn, cho dù họ thấy cách bắt được cảnh báo ban đầu trên radar NSURLProtocol
hoặc làm thế nào để lừa CFURLCopyAbsoluteURL
để thực hiện trường hợp tùy chỉnh của tôi. Tôi đã cố gắng để hack NSURL absoluteURL
bằng cách trở lại một trường hợp mới của lớp NSURL tùy chỉnh của tôi, nhưng nó đã không giúp đỡ. Tôi đã thấy một số lời hứa trong chức năng NSURLProtocol setProperty
, nhưng bây giờ nó xuất hiện khá vô ích. Hệ thống tải URL tạo ra các phiên bản mới của tất cả mọi thứ một cách vui vẻ và NSURLRequest
đến ở số NSURLProtocol
có vẻ giống như trường hợp được nhập vào UIWebView
chỉ vô tình.
CẬP NHẬT: ok tôi muốn giữ bài đăng càng ngắn càng tốt, nhưng ngay cả câu trả lời đầu tiên cũng yêu cầu nền tảng kỹ thuật, vì vậy ở đây chúng tôi đi: tôi có nhiều ứng dụng UIWebView
s. Các chế độ xem này có thể chạy yêu cầu đồng thời và hoàn toàn có thể chạy các yêu cầu cho cùng một URL. Nó giống như các tab trong trình duyệt trên máy tính để bàn. Nhưng tôi cần phải phân biệt số UIWebView
là nguồn gốc của mỗi số NSURLRequest
cụ thể đến số NSURLProtocol
. Tôi cần một ngữ cảnh được thực hiện với mỗi yêu cầu URL. Tôi không thể chỉ đơn giản là ánh xạ các URL đến dữ liệu, bởi vì nhiều UIWebViews
có thể tải cùng một URL tại bất kỳ thời điểm nào.
CẬP NHẬT 2: Việc đính kèm thông tin ngữ cảnh vào NSURL
được ưu tiên và, theo như hiểu biết của tôi, chỉ có thể sử dụng được. Vấn đề là các yêu cầu đối với tài nguyên được tham chiếu bên trong trang (hình ảnh, v.v.) không được xem trực tiếp UIWebViewDelegate
và kết thúc trực tiếp ở số NSURLProtocol
. Tôi không có cơ hội để liên lạc, kiểm tra hoặc sửa đổi các yêu cầu như vậy ở bất cứ đâu trước NSURLProtocol
. Liên kết theo ngữ cảnh duy nhất cho các yêu cầu như vậy là NSURLRequest mainDocumentURL
của chúng.
Vấn đề chính ở đây là bạn đang cố gắng tải thêm thông tin về 'NSURL' hơn URL. Vì vậy, câu hỏi là, loại thông tin nào bạn đang cố gắng vượt qua? Thông thường, bạn sẽ tải phụ đề này, bằng cách lưu trữ một bản đồ các URL tới "dữ liệu khác" trong một số đối tượng có thể truy cập vào 'NSURLProtocol', nhưng tôi nghĩ rằng hiểu rõ hơn về những gì bạn đang cố gắng giải quyết sẽ giúp ích ở đây. –
Đã hiểu, hãy xem bản cập nhật. –