我和我的同事正在大量基于PromiseKit v1.5.3构建异步数据层。我们注意到,在某些情况下,当从传递给then的块返回一个 promise (称为X)时,下一个then块实际上将Promse X作为该块的参数传递,而不是前一个 promise 实际解析为的参数。对于大多数Promise实现而言,链接可实现的Promise是一个非常重要的功能,因此我们感到非常惊讶。

经过一些冗长的调试 session 后,我们发现问题出在PromiseKit中。在解决过程中,IsPromise调用无法将对象标识为promise,这实际上是对
[result isKindOfClass:[PMKPromise class]]
该调用返回nil,并且执行了不正确的分支。 Here's the source

令人困惑的是,我看不到发生这种情况的任何原因。我认为这不是PromiseKit中的错误,因为它们的代码似乎是正确的。我已经确认基础对象确实是PMKPromise,因为它响应诸如valuefulfilled的promise方法。我什至使用调试器将其推入了正确的分支,并从那里正确执行!

Here's an interesting log from some tests while halted at the given line.

鉴于isKindOfClass返回nil,听起来该对象没有响应消息...但是它肯定是一个NSObject。我很好奇这可能是一个奇怪的编译器设置还是什么。如果相关,我目前将优化设置为无。有没有人看过这样的东西或知道发生了什么事?我应该检查什么?

最佳答案

当您在项目中两次尝试拥有相同的类时,isKindOfClass将返回意外结果。因此,您可能有一个PMKPromise类的对象,但这是一个不同的类(具有完全相同的类名,完全相同的行为,只是第二个类)。也许就是这样。显然设置断点并检查对象是什么会有所帮助。

关于ios - isKindOfClass在PromiseKit中返回nil吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30418280/

10-10 23:25
查看更多