2015-02-06 23 views
5

URL oturumumu yapılandırmak için [NSURLSessionConfiguration defaultSessionConfiguration] kullanıyorum.Geçersiz özgeçmiş verisi olan NSURLSession

Bir özgeçmiş verisi üretmek ve diske kaydetmek için cancelByProducingResumeData: numaralı telefonu arayarak görevi duraklatıyorum. Görevi yeniden başlatmak istediğimde, downloadTaskWithResumeData:'u arıyorum. Uygulamayı yeniden başlatana kadar iyi çalışıyor.

Bir görevi duraklattıktan sonra uygulamayı öldürüyorum. Ardından tekrar uygulamamı başlatıp downloadTaskWithResumeData numaralı telefonu arayın, özgeçmiş verilerin geçersiz olduğunu buldum.

Ben NSDictionary içine özgeçmiş verileri ayrıştırmak ve

"/private/var/mobile/Containers/Data/Application/5DD071C3-9D5E-4D76-9F74-57B6C92445CB/tmp/CFNetworkDownload_IUI6kg.tmp" olduğunu NSURLSessionResumeInfoLocalPath, olsun. Bu dosyaya erişmeye çalışıyorum, ancak mevcut değil.

Uygulamamı yeniden başlattıktan sonra özgeçmiş verilerini kullanarak indirme görevine nasıl devam edebilirim.

Teşekkürler.

+0

Teşekkür @ Mark, iyi bir soru: Bu yüzden nasıl çalışır, anahtarın ‘NSURLSessionResumeInfoLocalPath’ tarafından sanal alanında kaydedilen kum yolu güncelleştirmek. Kullanıcı uygulamayı kapatırsa veriyi diske nasıl yazdığınızı söyler misiniz? – NSPratik

cevap

1

Uygulamanızı yeniden başlattığınız her seferinde, tmp altındaki her şey temizlenir, aynı şeyi yaşıyordum, her * .tmp dosyasını kopyalamaya çalıştım ve uygulama yeniden başladığında geri yapıştırmaya devam etsem bile,

numaralı bir hatayı atar

Benim tavsiyem * .tmp dosya erişilebilir olup olmadığını kontrol bu sorunla karşılaştı değil

+0

@LittleBobyTables, cevaplarımı daha güzel olması için çok teşekkürler. Mark, ben ve ben her ikisini de aklımda tuttuğum şeyi elde etmek için [ASIHTTPRequest] (https://github.com/pokeb/asi-http-request) kullanarak sona ererim. –

+0

Tavsiyeniz için teşekkür ederiz. ResumeData yeniden ve * .tmp dosya yolunu değiştirebilir miyim? – Mark

1

eğer baştan yeniden indirmek, olmasıdır. IOS8'de uygulama yeniden başlatıldıktan sonra sanal alan yolunun değişeceğini buldum. Ancak, resumeData eski sanal alan yolunu kaydeder, bu da indirme görevinin resumeData'yu bulamamasına izin verir. - upvoted

NSDictionary *dic = [NSDictionary dictionaryWithContentsOfFile:resumeDataPath]; 
NSString *resumeDataFileName = [dic[@"NSURLSessionResumeInfoLocalPath"] lastPathComponent]; 
NSString *newTempPath = NSTemporaryDirectory(); 
NSString *newResumeDataPath = [newTempPath stringByAppendingPathComponent:resumeDataFileName]; 
[dic setValue:newResumeDataPath forKey:@"NSURLSessionResumeInfoLocalPath"]; 
[dic writeToFile:resumeDataPath atomically:YES];