تجاهل إدخال المستخدم أثناء انتظار مهمة - الهدف-C

StackOverflow https://stackoverflow.com/questions/1817726

  •  08-07-2019
  •  | 
  •  

سؤال

ولدي التطبيق مع زر "تحويل". عند النقر على هذا الزر، التطبيق يبدأ عملية جديدة باستخدام NSTask ثم رمادية على الزر حتى انتهاء العملية.

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

وأنا في انتظار لعملية لإنهاء باستخدام:

[task waitUntilExit];

وكيف يمكنني تجاهل أي إدخال المستخدم أثناء انتظار لهذه المهمة حتى النهاية؟

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

المحلول

و-[NSTask waitUntilExit] هو، بطبيعة الحال، مكالمة حظر. وهذا يعني أن توقف موضوع (كما يفعل حلقة المدى) واصطف كل الأحداث التي يتم إرسالها إلى موضوع حتى الحلقة المدى يمكن معالجتها.

وبدلا من waitUntilExit، كنت تفعل شيئا من هذا القبيل:

- (IBAction) myButtonMethod {
  NSTask * task = ....;
  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(taskFinished:) name:NSTaskDidTerminateNotification object:task];
  [myButton setEnabled:NO];
  [task launch];
}

- (void) taskFinished:(NSNotification *)note {
  [myButton setEnabled:YES];
}

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

نصائح أخرى

وحتى أسهل:

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