Sau khi đọc tài liệu của Apple về tải xuống nền với api iOS7 mới (NSURLSession), tôi hơi thất vọng một chút. Tôi chắc chắn rằng Apple đã được quản lý pause/resume qua mạng có sẵn ở chế độ nền (hoặc cung cấp một tùy chọn để làm như vậy) nhưng không có ...Tải xuống nền NSURLSession - tiếp tục qua lỗi mạng
Vì vậy, đọc tài liệu, đây là những gì chúng tôi đã có:
When any task completes, the NSURLSession object calls the delegate’s URLSession:task:didCompleteWithError: method with either an error object, or nil if the task completed successfully. If the task is a resumable download task, the NSError object’s userInfo dictionary contains a value for the NSURLSessionDownloadTaskResumeData key. Your app should use reachability APIs to determine when to retry, and should then call downloadTaskWithResumeData: or downloadTaskWithResumeData:completionHandler: to create a new download task to continue that download. Go to step 3 (creating and resuming task objects).
cho đến nay tôi hiểu được những giải pháp, nhưng câu hỏi của tôi là: Kiến trúc gì là tốt nhất để xử lý việc mất mạng và tiếp tục tải trong nền? Về phía tôi, tôi đang sử dụng khả năng truy cập và mỗi khi mạng khả dụng, tôi tiếp tục tất cả các tác vụ (được tham chiếu qua NSArray khi tạo) và tạm ngưng chúng khi mạng bị mất. Này hoạt động tốt trong foreground nhưng đối với nền Tôi cần giúp đỡ về những điểm sau đây:
Nếu ứng dụng của tôi không có khả năng kết nối trong foreground, nếu tôi đi đến nền mà không kết nối tất cả các nhiệm vụ của tôi vẫn còn lơ lửng và sẽ không đã quay lại nếu mạng khả dụng…
Mất mạng trong nền, dừng tất cả nội dung tải xuống/công việc của tôi. Kịch bản:
- Trong foreground, tôi bắt đầu tải về các nhiệm vụ của tôi
- tôi đi đến nền và sau 10s chuyển sang "chế độ aireplan"
- Tất cả công việc của tôi có một lỗi. Vì vậy, trong phương thức URLSession: task: didCompleteWithError: Tôi tiếp tục chúng bằng cách sử dụng downloadTaskWithResumeData hoặc nếu tôi không thể (vì một số không có đủ dữ liệu tiếp tục) Tôi đang tạo một nhiệm vụ mới mà không cần tiếp tục lại (trừ khi mạng đã trở lại) tại thời điểm đó).
- Sau đó, tôi đặt wifi lên
- Như tôi vẫn ở chế độ nền Tôi không thể kích hoạt một "sơ yếu lý lịch" khi mạng đã trở lại mà không cần tung ra ứng dụng ...
Làm thế nào để giải quyết những điểm ? Tôi đã bỏ lỡ một cái gì đó?
Tôi chia sẻ sự thất vọng của bạn. Bạn đề cập rằng bạn đang chờ đợi một câu trả lời từ Apple về điều này. Bạn đã nghe từ họ chưa? Độ phân giải là gì? – gavdotnet
Có rất nhiều trao đổi với Apple nhưng đã không hiệu quả, recommandation là sử dụng cờ tùy ý mà nên chăm sóc các trường hợp đề tài (nhưng không có garantie của kết quả trong thời gian). Chế độ này không phải là mục tiêu của tôi, tôi đã không tập trung nhiều vào điều này, nhưng thử nghiệm của tôi đã không thành công. Nếu bạn đã thử nghiệm về phần này mà vẫn còn thú vị để có được thông tin. – Gros