В 'Атрибутах файла' NSFileManager ссылка на класс вы можете видеть, что нет ключа, который будет возвращать длительность песни. Вся информация, которую получает экземпляр NSFileManager о файле, связана со свойствами самого файла в операционной системе, такими как его размер. NSFileManager фактически не интерпретирует файл.
Чтобы получить длительность файла, вам нужно использовать класс, который знает, как интерпретировать файл. Платформа AVFoundation предоставляет точный класс, который вам нужен, AVAsset . Вы можете создать экземпляр этого абстрактного класса, используя конкретный подкласс AVURLAsset , а затем предоставить ему NSURL , который указывает на аудиофайл, который вы хотите получить длительность. Затем вы можете получить продолжительность из экземпляра AVAsset , запросив его свойство duration
.
Например:
AVURLAsset* audioAsset = [AVURLAsset URLAssetWithURL:audioFileURL options:nil];
CMTime audioDuration = audioAsset.duration;
float audioDurationSeconds = CMTimeGetSeconds(audioDuration);
Обратите внимание, что AVFoundation разработан как сильно асинхронная среда для повышения производительности и общего пользовательского опыта. Даже выполнение простых задач, таких как запрос продолжительности мультимедийного файла, может занять много времени и привести к зависанию приложения. Вам следует использовать протокол AVAsynchronousKeyValueLoading для асинхронной загрузки длительности песни, а затем обновить свой пользовательский интерфейс в блоке обработчика завершения. Вам следует взглянуть на «Руководство по блочному программированию» , а также на видео WWDC2010 под названием «Discovering AV Foundation», которое можно бесплатно получить по https://developer.apple.com/videos/wwdc/2010.