2015-03-04 14 views
7

मुझे प्रतिनिधि विधि पर NSURLSession के साथ एक अजीब समस्या है FinishDownloadingToURL।NSURLSession didFinishDownloadingToURL अस्थायी डाउनलोड फ़ाइल नहीं मिली

- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask 
              didFinishDownloadingToURL:(NSURL *)location 
{ 
    if (![[NSFileManager defaultManager] fileExistsAtPath: [location path]]) 
    { 
     NSLog(@"Error. File not found"); 
     return; // is giving error when the app is wake up by the system 
    } 
    ... 
} 

यह सामान्य रूप से काम करता है जब एप्लिकेशन को अग्रभूमि और डाउनलोड समाप्त होने के में है:

पहली बात मैं कर रहा हूँ की जाँच करता है, तो अस्थायी डाउनलोड की गई फ़ाइल मौजूद है। लेकिन जब ऐप पृष्ठभूमि में होता है और ऑपरेटिंग सिस्टम द्वारा मजबूर रूप से मारा जाता है, तो यह झूठा होता है।

क्या किसी के पास क्या हो रहा है इसके बारे में कोई जानकारी है? मुझे पता है कि इस प्रतिनिधि विधि के निष्पादन के लिए समय सीमा है जब ऐप ऑपरेटिंग सिस्टम द्वारा जागृत हो जाता है, इसके द्वारा अस्थायी फ़ाइल के लिए कोई अर्थ नहीं होता है। मैं इसे किसी अन्य स्थान पर भी कॉपी नहीं कर सकता ... क्या यह फ़ाइल के आकार की वजह से समझ में आता है? मैं + -130 एमबी की फाइल डाउनलोड कर रहा हूं।

धन्यवाद।

+0

मुझे एक ही समस्या है। एक बग्रेपोर्ट दायर किया गया http://openradar.appspot.com/radar?id=4943165404479488 – Biga

+0

वैसे भी यूआरएल खोलने का प्रयास करें। ऐप सैंडबॉक्स से संबंधित कुछ quirk की वजह से fileExistsAtPath कॉल आपको झूठ बोल सकता है। – dgatwood

+0

समान समस्या है। स्थान उस फ़ाइल को इंगित कर रहा है जो मौजूद नहीं है। यह अक्सर नहीं होता है। थोड़ा परेशान मैं सोच रहा हूं कि क्या यह बग खराब बैटरी जीवन का कारण बन रहा है, क्योंकि वह फ़ाइल दोबारा डाउनलोड की जाएगी। और यदि स्थान फिर से गलत है, फिर से डाउनलोड करने से ... आदि। –

उत्तर

1

मैंने अनइंस्टॉल ऐप के बाद ऐप इंस्टॉल करके एक ही समस्या हल की। ऐसा लगता है कि एनएसआरएलएसशन सिस्टम पर मलबे छोड़ देता है जब नेटवर्क सत्र काम करते समय मजबूर होना बंद हो जाता है।

+0

पूरा होने पर मौजूद प्रतीत होता है, मैं सिम्युलेटर पर एक फ्रेमवर्क प्रोजेक्ट (ऐप नहीं) पर यूनिट टेस्ट लक्ष्य चला रहा हूं, इसलिए सुनिश्चित करें कि आपके समाधान का प्रयास कैसे करें। मैं ** ** सेटअप() 'और' tearDown() 'दोनों में सत्र को अमान्य कर रहा हूं ... –

+0

मुझे इसे स्थान /var/mobile/Library/Caches/com.apple.nsurlsessiond/Downloads के रूप में प्राप्त हो रहा है /com.xxxxxxx/CFNetwo rkDownload_uFBpqp.tm p मैं आईओएस 10.3.2 पर एक ही व्यवहार देख रहा हूं। वर्तमान में इसे ठीक करने का एकमात्र तरीका डिवाइस को रीबूट करना है –

-2

Apple Docs से:।

अस्थायी फ़ाइल के लिए एक फ़ाइल URL (location है ..) "क्योंकि फ़ाइल अस्थायी है, आप या तो पढ़ने के लिए फ़ाइल को खोलने या एक स्थायी स्थान के लिए उस में स्थानांतरित करना होगा अपने इस प्रतिनिधि विधि से लौटने से पहले ऐप की सैंडबॉक्स कंटेनर निर्देशिका।

यदि आप पढ़ने के लिए फ़ाइल खोलना चुनते हैं, तो आपको प्रतिनिधि कतार को अवरुद्ध करने से बचने के लिए किसी अन्य धागे में वास्तविक पढ़ने को करना चाहिए। "

+1

दिए गए उदाहरण में, फ़ाइल को "इस प्रतिनिधि विधि से लौटने से पहले" एक्सेस किया जाता है - समस्या यह है कि यह वहां नहीं है। ऐप्पल दस्तावेज़ सामान्य परिस्थितियों में सटीक हैं, लेकिन ऊपर वर्णित मामले में नहीं। – Joseph

संबंधित मुद्दे