Нашел причину. Я чувствую себя глупо сейчас.
Ошибка заключалась в прикреплении блока (как и второго) к моему объекту в качестве связанных объектов через:
static NSString * const FirstBlockKey;
static NSString * const SecondBlockKey;
objc_setAssociatedObject(self, FirstBlockKey, blockA, OBJC_ASSOCIATION_COPY);
objc_setAssociatedObject(self, SecondBlockKey, blockB, OBJC_ASSOCIATION_COPY);
в то время как я должен был четко использовать это:
objc_setAssociatedObject(self, (void *)&FirstBlockKey, block, OBJC_ASSOCIATION_COPY);
FirstBlockKey
и SecondBlockKey
оба, очевидно, 0x0
, в то время как их собственные указатели - нет.
Таким образом, он просто вызвал неправильный блок (поскольку они оба были назначены на одну и ту же клавишу `0x0 '). Блоки имели разные типы возвращаемого значения и аргумента, что, по-видимому, вызвало странный обмен переданными аргументами блока. Работает нормально сейчас.
Как говорится: Джо , Райан & wbyoung , спасибо за ваши усилия, ребята!