سؤال

أرغب في استبدال زر التحديث بمؤشر النشاط عندما يضغط المستخدم على زر التحديث وبعد تحديث TableView ، أريد تغييره مرة أخرى إلى زر التحديث. ولكن عندما أضغط على زر التحديث ، لم يتغير إلى مؤشر النشاط ولكن يتم تمييز زر التحديث حتى يتم إعادة تحميل البيانات.

الرمز كما هو موضح أدناه. هل فاتني شيء؟

-(void) reloadNewsStarted{        
UIActivityIndicatorView *activityIndicatorRightBarItem = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(0, 0, 20, 20)];
[activityIndicatorRightBarItem startAnimating];
UIBarButtonItem *activityItem = [[UIBarButtonItem alloc] initWithCustomView:activityIndicatorRightBarItem];
[activityIndicatorRightBarItem release];
self.navigationItem.rightBarButtonItem = activityItem;
[activityItem release];

[self reloadNewsEnded];
}

-(void) reloadNewsEnded {

//reload data process

UIBarButtonItem *reloadNewsBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(reloadNewsStarted)];
reloadNewsBtn.style = UIBarButtonItemStyleBordered;
self.navigationItem.rightBarButtonItem = reloadNewsBtn;
[reloadNewsBtn release];  }
هل كانت مفيدة؟

المحلول

بدلا من الكتابة

[self reloadNewsEnded];

اكتب رجاءا

[NSThread detachNewThreadSelector:@selector(reloadNewsEnded) toTarget:self withObject:nil];

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

نصائح أخرى

لماذا هذا الخط في نهاية reloadNewStarted طريقة

[self reloadNewsEnded];

يبدو أن مجرد التراجع عن التغييرات على الزر؟ يجب أن تنتظر حتى يكتمل الإجراء قبل الاتصال به

لن يسري تغيير الزر حتى تستعيد حلقة التشغيل السيطرة من الكود الخاص بك. يبدو أن عملية إعادة التحميل الخاصة بك متزامنة وتمنع قائمة انتظار الحدث ، مما لن يسمح بحدوث ذلك. إذا استغرقت المعالجة الخاصة بك قدرًا ملحوظًا من الوقت ، فأنت بحاجة إلى استخدام خيط خلفية أو معالجة غير متزامنة على حلقة التشغيل الرئيسية (على سبيل المثال ، باستخدام NSURLConnection لإدارة مهمة الشبكة وعمليات الاتصال) حتى لا تحظر.

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