Нет абсолютно никакого способа ответить на этот вопрос, поскольку он сформулирован, но вот некоторые подсказки:
, если есть сбой, есть обратный след.Опубликуйте его.
Если произошел сбой, возникла какая-то ошибка.Отправьте его.
Учитывая этот код, я могу придумать два режима отказа:
songPathForm
- это nil
илиповрежден и / или не является URL.
данные в URL
слишком велики для загрузки и заставляют приложение пытаться выделить ОГРОМНЫЙ объем памяти (в некоторых случаяхвыделение может быть достаточно большим, чтобы вызвать сбой приложения без запуска механизма jetsam системы.
Нет сообщения об ошибке, оно просто зависает и перестает отвечать.url не ноль, это ...
Тогда почему вы сказали, что ваше приложение упало?!
dataWithContentsOfURL:
синхронно загружает содержимое того, что находится по URL.
Таким образом, вы блокируете основной цикл событий во время загрузки, и поэтому ваше приложение не отвечает.
Вам необходимо асинхронно загрузить данные;т.е. не блокировать основной цикл событий.
Однако это, вероятно, не решит полностью вашу проблему, так как выглядит, что содержимое этого URL действительно велико и, таким образом, вы, вероятно, собираетесьисчерпать память, если вы пытаетесь загрузить в память.
Вам нужно либо загрузить файл на диск, либо вам нужно загрузить только те его части, которые вам нужны прямо сейчас, или вам необходимо выполнить потоковую передачу (если это действительно большой аудиофайл, как следует из URL).
Код в вашем обновленном вопросе не имеет никакого смысла.Как вы ожидаете, что songData
будет заполнено данными из соединения?
Когда вы делаете что-то асинхронно, вы в основном говорите: «Иди, сделай это, и дай мне знать время от времени, как оно происходит».В этом случае это будет уведомление о том, что доступно больше данных или что соединение установлено на чтение (или по ошибке).
Вы не можете запросить данные сразу, потому что данные не сразудоступно.
Вам нужно прочитать это руководство .