سؤال

أقوم بتنزيل MP3 باستخدام NSData DatawithContentsofurl: url. يستغرق هذا بعض الوقت ، وبينما يقوم الملف بتنزيل التطبيق. أريد أن أتعامل بشكل جيد ومثالية أرغب في إظهار تقدم التنزيل ولكن لا يمكنني العثور على طرق لهذا الغرض.

إنه في UiviewController وقمت بمحاولة أولى من خلال وضع UiActivityIndicatorView وبدء تشغيله قبل أن أبدأ التنزيل ، ثم أوقفه عن الدوران ولكن لا شيء يظهر.

لذا سؤالي حقًا هو من فضلك هل يمكن لأحد أن يخبرني ما هي أفضل طريقة للتعامل مع هذا؟ شكرا جزيلا

هل كانت مفيدة؟

المحلول

لن يظهر أي شيء لأن موضوعك الرئيسي محظور للقيام بالتنزيل ، والخيط الرئيسي هو المكان الذي تحدث فيه تحديثات واجهة المستخدم.

يجب أن تستخدم nsurlconnection لتنزيل بشكل غير متزامن وتنفيذ أساليب المندوب لبدء/إيقاف الدوار الخاص بك.

بدلاً من ذلك إذا كنت تريد الالتزام به NSDatadataWithContentsOfURL:url يجب عليك القيام بذلك على موضوع منفصل وتحديث الدوار على الخيط الرئيسي قبل وبعد الاتصال به.

نصائح أخرى

يمكنك تحقيق ذلك مع الاستمرار في استخدام الأساليب المتزامنة ، ولكن تحتاج إلى منح حلقة التشغيل فرصة لبدء تشغيل مؤشر النشاط قبل بدء التنزيل.

يمكنك تحقيق ذلك باستخدام أي منهما performSelector:withObject:afterDelay: مع تأخير 0 لوضع حلقة تشغيل بين بداية الرسوم المتحركة الخاصة بك والتنزيل ، أو (أسوأ نمط ، أكثر خطورة) يمكنك استدعاء حلقة التشغيل مباشرة داخل الكود الخاص بك.

عينة من الرموز:

- (void)loadPart1 {
  activityIndicator = [[[UIActivityIndicatorView alloc]
                        initWithActivityIndicatorStyle:UIA...StyleGray]
                       autorelease];
  activityIndicator.frame = myFrame;
  [self.view addSubview:activityIndicator];
  [activityIndicator startAnimating];
  [self performSelector:@selector(loadPart2) withObject:nil afterDelay:0];
}

- (void)loadPart2 {
  [NSURLConnection sendSynchronousRequest:request returningResponse:&response
                                    error:&error];
  [activityIndicator stopAnimating];
}

مزيد من التفاصيل هنا:http://bynomial.com/blog/؟p=15(قم بالتمرير لأسفل إلى الحل 1 أو الحل 2).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top