ตรวจสอบการดาวน์โหลดจากตัวควบคุมมุมมองอื่น AFNetworking iOS

ฉันมี ViewController ที่มี UITableView อยู่ข้างใน ซึ่งแสดงรายการไฟล์ที่อยู่บนเซิร์ฟเวอร์ แต่ละเซลล์ของตารางนี้มีตัวบ่งชี้ที่แสดงความคืบหน้าของการดาวน์โหลดและอื่นๆ

ปัญหา:

เมื่อฉันกลับไปที่ ViewController อื่น และกลับมาที่คอนโทรลเลอร์ด้วย TableView ความคืบหน้าและตัวบ่งชี้ในเซลล์จะปรากฏขึ้นเหมือนกับว่าไฟล์ไม่ได้ดาวน์โหลด แต่ไฟล์ยังคงดาวน์โหลดอยู่ในเบื้องหลัง

วิธีแก้ปัญหาที่เป็นไปได้ของฉัน:

มี NSMutableArray ทั่วโลกซึ่งมีการดาวน์โหลดทั้งหมดในออบเจ็กต์ NSDictionary หลายรายการ (แต่ละพจนานุกรมเป็นการดาวน์โหลด มีความคืบหน้า ดัชนีของแถว)

ถ้าฉันออกจาก ViewController ด้วย Table แล้วกลับมา ฉันจะตรวจสอบว่ามีการดาวน์โหลดที่กำลังดำเนินการอยู่หรือไม่ (โดยการนับอ็อบเจ็กต์ใน Downloads Array) และเริ่มจับเวลาซึ่งจะอัปเดตแต่ละรายการใน Downloads Array และผลักดันการเปลี่ยนแปลง ไปที่ TableView

(ฉันใช้ AFURLConnectionOperation กับ progressBlock เพื่ออัปเดตตัวบ่งชี้)

มีวิธีแก้ไขที่ดีกว่านี้หรือไม่? ขอบคุณ!


person facumedica    schedule 18.08.2015    source แหล่งที่มา


คำตอบ (2)


ไม่ว่าอาร์เรย์ที่ไม่แน่นอนของคุณจะเป็นโกลบอลแบบธรรมดาหรือซิงเกิลตันหรือคุณสมบัติของตัวแทนแอปหรือตัวควบคุมมุมมองรูทนั้นขึ้นอยู่กับคุณ แต่แนวคิดนั้นถูกต้องที่จะดึงการประสานงานของการดาวน์โหลดออกจากตัวควบคุมมุมมองที่นำเสนอด้วยตัวมันเอง

แต่สิ่งที่ดูเหมือนไม่ถูกต้องคือการใช้ตัวจับเวลา แทนที่จะเป็นตัวจับเวลาที่กำลังสำรวจความคืบหน้าในการดาวน์โหลดและอัปเดตตารางตามนั้น ฉันขอแนะนำวิธีการตามการแจ้งเตือนโดยที่ผู้ดาวน์โหลดโพสต์การแจ้งเตือนไปที่ [NSNotificationCenter defaultCenter] เป็นความคืบหน้าในการดาวน์โหลด/เสร็จสมบูรณ์ จากนั้นให้ตัวควบคุมมุมมองลงทะเบียนตัวเองเป็นผู้สังเกตการณ์สำหรับการแจ้งเตือนเหล่านี้ อัปเดต UI เมื่อมีการแจ้งเตือนเข้ามา

person Rob    schedule 18.08.2015
comment
ขอบคุณ ฉันได้แจ้งเตือนการเปลี่ยนแปลงชื่อแล้ว และผลักดันการเปลี่ยนแปลงดังกล่าวในรูปแบบของ NSArray ที่มีความคืบหน้าและดัชนีแถว แล้วจะแจ้งให้ทราบเป็นอันเสร็จสิ้น ดูเหมือนว่าจะใช้งานได้ดี ขอบคุณอีกครั้ง - person facumedica; 18.08.2015

ฉันขอแนะนำให้คุณอ่านบทช่วยสอนนี้:

http://www.raywenderlich.com/51127/nsurlsession-tutorial

ซึ่งจะให้คำตอบเกี่ยวกับวิธีการจัดการกับกรณีของคุณ

person Anand    schedule 18.08.2015