isKindOfClass在PromiseKit中返回nil?

时间:2015-05-23 22:44:14

标签: ios objective-c promisekit

我的同事和我正在构建一个基于PromiseKit v1.5.3的异步数据层。我们注意到在某些情况下,当从传递给then的块返回一个promise(称之为X)时,下一个then块实际上将Promse X作为块的参数传递,而不是以前的承诺实际上已经解决了。对于大多数Promise实现来说,链接可靠的承诺是一个非常重要的特性,所以我们非常惊讶。

在一些相当冗长的调试会话之后,我们发现问题出在PromiseKit中。在解析过程中,IsPromise调用无法将对象标识为承诺,这实际上是对

的简单调用

[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。我很好奇,如果这可能是一个奇怪的编译器设置或其他东西。如果相关,我目前的优化设置为无。有没有人见过这样的事情或知道发生了什么?我该怎么检查?

1 个答案:

答案 0 :(得分:2)

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