重新定义外部块(promiseKit)

Redefine extern block (promiseKit)

我正在使用 PromiseKit(很棒的框架,顺便说一句!)来处理我的应用程序和服务器之间的通信 API。我想创建某种全局处理程序来响应诸如通知用户我的许多承诺中的任何一个都缺少网络连接之类的事情。

PMKPromise.h 文件列出了一个未处理的错误处理程序:

/**
Called by PromiseKit in the event of unhandled errors.
The default handler NSLogs the error. Note, your handler is executed
from an undefined queue, unless you manage thread-safe data, dispatch to
a safe queue before doing anything else in your handler.
*/
extern void (^PMKUnhandledErrorHandler)(NSError *);

此类型随后在 PMKPromise.m 文件中实现,尽管文档块暗示这可以被覆盖。我的问题是我该如何重新定义这个变量?

复制 .m 文件中使用的相同语法会导致链接器错误

void(^PMKUnhandledErrorHandler)(id) = ^(NSError *error){
    //...
};

==> duplicate symbol _PMKUnhandledErrorHandler
PMKUnhandledErrorHandler = ^(id error) {
    // your code here
};

警惕不方便的错误处理程序,有时它会在错误发生后很长一段时间内被调用,具体取决于相关承诺何时被解除分配。它是可靠的,但并不总是立即可靠。

99% 的时间它会很慢,因为某些对象仍然在您的链中某处处理承诺并且它很快将被释放但尚未释放。