Во-первых, вы делаете запуск соединения слишком сложным. Изменить на:
connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]
Удалить [connection start]
. Сейчас:
- Ваше приложение определенно выполняет цикл выполнения нормально? NSURLConnection требует, чтобы это работало.
- Можете ли вы выполнить синхронную загрузку запроса URL?
- В отладчике вы видите, что
url
это то, что вы ожидаете? Что это?
- Возможно ли, что вы освобождаете WSHelper до получения каких-либо сообщений делегата? NSURLConnection в конце концов является асинхронным.
Не нужно делать ничего особенного, чтобы использовать NSURLConnection, это простая часть фреймворка Foundation. Никаких специальных настроек компилятора не требуется. Нет инициализации перед использованием. Ничего такого. Пожалуйста, не начинайте слепо пробовать что-то вроде ввода CoreServices.Framework.
Поскольку синхронная отправка запроса работает, возможно, что-то не так с вашей обработкой асинхронного аспекта. Это может быть:
- Runloop не работает в
NSDefaultRunLoopMode
, поэтому соединение не может планировать себя.
- Какая-то другая часть вашего кода вызывает
-cancel
для соединения, прежде чем оно сможет загрузиться.
- Вам удается освободить соединение до того, как оно сможет загрузиться.
Реальная проблема
Ах, на самом деле я только что понял, что происходит. Вы звоните:
-[NSApp runModalForWindow:]
Прочитайте описание того, что делает этот метод . Он не запускает цикл выполнения, как ожидает NSURLConnection
. Я бы сказал, что на самом деле вы не хотите показывать окно, подобное этому, при запуске URL-соединения для него.
Я бы также предложил вам реализовать метод делегата -connection:didReceiveResponse:
. Здесь вы хотите проверить, что сервер возвращает ожидаемый код состояния.