У меня есть общий обработчик фона, который я создал, чтобы решить эту проблему.Только первый метод является общедоступным, поэтому его можно использовать повсюду.Обратите внимание, что все параметры обязательны.
+(void) Run: (SEL)sel inBackground: (id)target withState: (id)state withCompletion: (void(^)(id state))completionHandler // public
{
[(id)self performSelectorInBackground: @selector(RunSelector:) withObject: @[target, NSStringFromSelector(sel), state, completionHandler]];
}
+(void) RunSelector: (NSArray*)args
{
id target = [args objectAtIndex: 0];
SEL sel = NSSelectorFromString([args objectAtIndex: 1]);
id state = [args objectAtIndex: 2];
void (^completionHandler)(id state) = [args objectAtIndex: 3];
[target performSelector: sel withObject: state];
[(id)self performSelectorOnMainThread: @selector(RunCompletion:) withObject: @[completionHandler, state] waitUntilDone: true];
}
+(void) RunCompletion: (NSArray*)args
{
void (^completionHandler)(id state) = [args objectAtIndex: 0];
id state = [args objectAtIndex: 1];
completionHandler(state);
}
Вот пример того, как он называется:
NSMutableDictionary* dic = [[NSMutableDictionary alloc] init];
__block BOOL done = false;
[Utility Run: @selector(RunSomething:) inBackground: self withState: dic withCompletion:^(id state) {
done = true;
}];