Получение обратных вызовов FSPathCopyObjectAsync в ARC - PullRequest
3 голосов
/ 27 января 2012

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

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

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

Очень обязан. EP.

P.S. По причинам избыточности вот суть: https://gist.github.com/6f3715753896ccf6fd35

1 Ответ

0 голосов
/ 05 февраля 2012

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

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

...