Вопрос

Я хочу использовать FSPathCopyObjectAsync и я терплю неудачу.Чтобы разобраться в этой проблеме, я искал ее примеры в другом месте, и хотя я экспериментировал с слегка устаревшим исходным кодом из Учебник Мэтта Лонга по теме «Какао — моя девушка» окончен., затем я нашел немного более подробный пример в проект на github, как категория на NSFileManager.Поскольку мой проект работает под управлением ARC, я попробовал его портировать, но удалось это сделать только наполовину.

В своем текущая форма, фактическое копирование работает, но метод обратного вызова MZCopyFSPathFileOperationStatusProc никогда не вызывается.Этот метод обратного вызова является единственной причиной использования асинхронного копирования, в противном случае с таким же успехом можно было бы запустить синхронное копирование в фоновом режиме.Я предполагаю, что причина того, что обратный вызов не вызывается, заключается в том, что какой-то объект неправильно выпущен ARC, но может произойти что-то еще.Я держусь за возвращаемый объект copyItemAsyncAtPath:toPath:destName:options:statusChangeInterval:error: метод, так что этого не может быть, верно?

Кто может найди ошибку и объясните, почему эта категория не генерирует обратные вызовы?Это АРК?Это что-то еще?

Весьма признателен.ЕР.

P.S.Из соображений избыточности, вот суть: https://gist.github.com/6f3715753896ccf6fd35

Это было полезно?

Решение

На вашего делегата должна быть какая-то сильная ссылка.NSFileManager будет хранить на него только слабую ссылку (как и должно быть), поэтому, если у вас нет сильной ссылки на него, ваш делегат будет освобожден, и обратные вызовы не будут видны.

Рассматривали ли вы возможность использования блоков для обратных вызовов?Наверное, это было бы предпочтительнее.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top