سؤال

أحاول مراقبة موضوع قمت بتعيينه في الخلفية. أحتاج إلى التنبيه عند الانتهاء من التنفيذ.

- (IBAction) btnGreaterTen_clicked :(id)sender{

    self.searchDistance = [NSNumber numberWithDouble : 10];

    CGRect frame = CGRectMake (120.0, 185.0, 80, 80);

    activity = [[UIActivityIndicatorView alloc] initWithFrame: frame];
    activity.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray;


    [navigationUpdateFromDetail.window addSubview: activity];


    [activity startAnimating];


    thread = [[NSThread alloc] init];
    [thread start];

[self performSelectorInBackground: @selector (getSetDisplay) withObject:nil];         

if(thread.isFinished == YES){
    [activity stopAnimating];
}
 }

الرمز أعلاه ما لدي بعد محاولة إعداد مختلف من أجل تحقيق النتيجة النهائية. أحاول تحريك UiActivityIndicator أثناء استخدام هذه الطريقة "getSetDisplay" للاستيلاء على المعلومات من الشبكة.

الوظيفة جيدة ، لكن مؤشر النشاط لم يكن قادمًا. قيل لي إنني بحاجة إلى تشغيل العملية على موضوع خلفية والرسوم المتحركة على الخيط الرئيسي. مشكلتي الآن هي كيف أراقب عندما تتم هذه العملية لإيقاف مؤشر النشاط. شكرا لكم مقدما

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

المحلول

يجب أن تفكر في المشكلة من زاوية مختلفة: يجب أن تدع "الخيط الرئيسي" الخاص بك يستمر في التشغيل ، والسماح "لخيطك الثانوي" بالاتصال بمحدد على الخيط الرئيسي عند القيام به في العمل.

لإنجاز هذا ، يجب عليك استخدام performSelectorOnMainThread الطريقة ، واتصل بها من موضوعك الثانوي. النموذج الأولي هو - (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait. يجب عليك وضع رمز "الانتهاء" الخاص بك بطريقة ما ، ثم تفعل شيئًا مثل:

[self performSelectorOnMainThread:@selector(doneDoingWork) withObject:nil waitUntilDone:NO];

نصائح أخرى

شكرا يا رفاق. لقد حصلت أخيرًا على حل عمل بفضل مايك وتعليقه أعلاه.

- (IBAction) btnGreaterTen_clicked :(id)sender{

self.searchDistance = [NSNumber numberWithDouble : 10];


[activity startAnimating];

NSLog(@" search value after change %@", [searchDistance description]);

[self performSelectorInBackground: @selector (getSetDisplay) withObject: nil];
}

لقد بدأت مؤشر النشاط على [النشاط startAnimating] الذي يعمل على الخيط الرئيسي. ثم بدأت طريقتي على موضوع خلفية مع "PerformseSelectorInbackground". وفي نهاية طريقة "getSetDisplay" ، وضعت البيان التالي.

[activity performSelectorOnMainThread: @selector (stopAnimating) withObject:nil   waitUntilDone:NO];

هذه مجرد طريقة أخرى لقول [Activity Stopanimating] ، والتي تعمل على الموضوع الرئيسي.

شكرا لجميع ما استجاب.

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