You don't need __weak
there.
As you said in the comments, it worked in debug builds since no optimizations were in place, but in release builds the compiler decided to optimize away the weak references, leaving you with nil
passed as an argument.
Just get rid of the unnecessary __weak
modifier and you'll be good.