Вы должны показать нам, как вы создаете блок и назначаете его для userData, чтобы быть уверенным, но я предполагаю, что вы не копируете блок, и он выходит из области видимости, например:*
Блоки создаются в стеке.Это означает, что когда составной оператор (например, функция), содержащий его, заканчивается, блок больше не действителен.Если вы хотите, чтобы блок выжил, вам нужно скопировать его в кучу:
objectLoader.userData = [^{ ... } copy];