我正在使用 mainQueueConcurrency 将 NSArrayController 绑定(bind)到 managedObjectContext。

我想要做的就是用我自己的函数修改排列对象的排序属性,然后调用 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 ,它不起作用。选择不会发生。

我相当确信,就像 NSArrayController 上的 fetch 一样,rearrangeObjects 会在下一次运行循环迭代中自行调度。** 那么我该如何证明呢?我可以在那里设置断点并检查阵列 Controller 等。我有,我怀疑这就是正在发生的事情。

但是是否有一些调试技巧可以使“Eureka!这行代码启动异步操作”变得明显?

** 是 cocoa 绑定(bind)在异步执行某些操作。当然。重新排列对象只是触发它。

最佳答案

通过在可疑代码行之前中断并在 GCD dispatch_async 函数上启用 符号断点,我能够捕获调用 rearrangeObjects(通过绑定(bind))的 dispatch_async_f:

而且,果然,dispatch_async_f 符号断点停在 rearrangeObjects 行:

关于objective-c - 如何确定 Apple 方法是否是异步的?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23773827/

10-09 16:23