Tôi đang gặp sự cố khi tài nguyên video trong số UIWebView
của tôi không tải. Đây chỉ là vấn đề trên thiết bị thực tế - mọi thứ hoạt động hoàn hảo trên trình mô phỏng.NSURLProtocol - startLoading không được gọi sau khi canInitWithRequest trả về CÓ cho tài nguyên trang
Lưu ý: Tôi đã kiểm tra điều này và vấn đề liên quan đến việc tải cùng một nội dung nhiều lần. NSURLProtocol isn't asked to load after YES response to canInitWithRequest
Các tải trang thực tế fine- trong tùy chỉnh của tôi NSURLProtocol
, nó sẽ trả YES
từ canInitWithRequest
(nhiều lần) và sau đó startLoading
được gọi sau khi về thứ 4 hoặc thứ 5 thời gian. Sau đó nó tải tệp css của tôi theo cách tương tự. Sau đó, tôi thấy rằng yêu cầu đối tượng video của tôi trả về YES
từ canInitWithRequest
, nhưng không có gì xảy ra với nó. startLoading
không bao giờ được gọi cho yêu cầu của tài nguyên video của tôi. Dưới đây là nhật ký đơn giản từ điện thoại của tôi khi tôi tải trang:
canInitWithRequest: https://WebpageURL
canInitWithRequest: https://WebpageURL
canInitWithRequest: https://WebpageURL
canInitWithRequest: https://WebpageURL
canInitWithRequest: https://WebpageURL
START LOADING: https://WebpageURL
canInitWithRequest: https://WebpageURL
canInitWithRequest: https://WebpageURL
canInitWithRequest: https://WebpageURL
canInitWithRequest: https://cssResource
START LOADING: https://cssResource
canInitWithRequest: https://MyVideoResource
Khi tôi nạp chính xác cùng một trang từ mô phỏng chạy phiên bản iOS cùng vào loại thiết bị tương tự chính xác, các bản ghi cho thấy tài nguyên thực sự bắt đầu tải ở đây đối với một số lý do:
canInitWithRequest: https://WebpageURL
canInitWithRequest: https://WebpageURL
canInitWithRequest: https://WebpageURL
START LOADING: https://WebpageURL
canInitWithRequest: https://WebpageURL
canInitWithRequest: https://cssResource
START LOADING: https://cssResource
canInitWithRequest: https://MyVideoResource
canInitWithRequest: https://MyVideoResource
START LOADING: https://MyVideoResource -- WHY NOT ON DEVICE?
các trang còn lại với một video mà không bao giờ plays- chỉ là một hộp màu trắng mà nó phải và nút "Video play" trên nó. Trang có vẻ như liên tục tải một thứ gì đó (chỉ báo hoạt động trên thanh trạng thái đang quay) nhưng không có gì xảy ra và hoạt động mạng trong trình điều hướng gỡ lỗi của Xcode được căn chỉnh.
tl; dr
Có ai biết tại sao tải tài nguyên này không bao giờ được thử trên iPhone của tôi không? Rõ ràng các mô phỏng biết rằng nó cần phải được nạp.
EDIT: Đây là mã có liên quan một chút biên tập từ NSURLProtocol tôi
@implementation CHHTTPURLProtocol
{
NSURLConnection *connection;
NSHTTPURLResponse *httpResponse;
NSData *responseData;
}
+ (BOOL)canInitWithRequest:(NSURLRequest *)request
{
if (/* key exists on request */)
return NO;
else if (/* not http or https */)
return NO;
NSLog(@"canInitWithRequest: %@", request.URL.absoluteString);
return YES;
}
+ (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request
{
return request;
}
- (void)startLoading
{
NSMutableURLRequest *request = [self.request mutableCopy];
NSLog(@"START LOADING: %@", request.URL.absoluteString);
if (authenticate) authenticate(request);
/* add key to request */
connection = [NSURLConnection connectionWithRequest:request delegate:self];
}
- (void)stopLoading
{
[connection cancel];
connection = nil;
}
/* Other methods like connection:didReceiveData: and connectionDidFinishLoding: */
+ (void)authenticateWithBlock:(AuthenticationBlock)block
{
authenticate = block;
}
static AuthenticationBlock authenticate;
vài câu hỏi: Simulator và thiết bị chạy cùng một phiên bản iOS? Mạng có giống nhau trên điện thoại và máy mac của bạn nơi bạn chạy trình giả lập không? Mã nguồn bạn sử dụng để tải video? – Lefteris
@Lefteris Cả mô phỏng và thiết bị đều chạy 8.4. Cả hai đều được kết nối với cùng một mạng wifi và đang tải chính xác tài nguyên HTML. Bài đăng đã được cập nhật với mã NSURLProtocol có liên quan. – Stonz2
tại sao bạn không trả lại CÓ trên tất cả canInitWithRequest? hoặc ít nhất in ra yêu cầu trong canInitWithRequest để tìm ra sự khác biệt? – Allen