Как я могу определить, являются ли методы Apple асинхронными?
Я связываю NSArrayController с managedObjectContext с mainQueueConcurrency.
Все, что я хочу сделать, это изменить свойства sort аранжированных объектов с помощью моей собственной функции, а затем вызвать rearrangeObjects
а затем выберите несколько объектов.
Но это выглядит как rearrangeObjects
не выполняется синхронно.
Так как я могу доказать это, так или иначе?
Это работает:
[self.myArrayController rearrangeObjects];
// Async needed -- I believe rearrange calls a fetch, which is async
dispatch_async(dispatch_get_main_queue(), ^{
[self.myArrayController setSelectedObjects:anArray];
});
Минус dispatch_async
не работает Выбор не происходит.
Я вполне уверен, что как fetch
на NSArrayController, rearrangeObjects
планирует себя на следующую итерацию runloop.** Так как мне доказать это? Я могу добавить точки останова и проверить контроллер массива и т. Д. И так, и я подозреваю, что так и происходит.
Но есть ли какая-то хитрость для отладки, которая бы сделала очевидным: "Эврика! Эта строка кода запускает асинхронную операцию"??
** Это были привязки какао, которые делают что-то асинхронно. Конечно. RerangeObjects просто вызывает его.
1 ответ
Я смог поймать rearrangeObjects
ссылающееся dispatch_async_f
(через привязки), разрывая непосредственно перед подозрительной строкой кода и включая символические точки останова в функциях dispatch_async GCD:
И, конечно же, dispatch_async_f
символическая точка останова остановлена на rearrangeObjects
линия: