Какао: NSURLConnection не пытается HTTP-запрос - PullRequest
4 голосов
/ 06 ноября 2008

У меня был значительный успех с NSURL, NSURL [Mutable] Request, NSURLConnection с моими приложениями для iPhone. При попытке скомпилировать отдельное приложение Какао, 10-строчную программу, чтобы сделать простой HTTP-запрос, нет ошибок или предупреждений компилятора. Программа компилируется нормально, но HTTP-запрос никогда не отправляется на мой веб-сервер (я запускаю tcpdump и параллельно смотрю логи Apache). Когда я запускаю очень похожий код в приложении для iPhone, по сути, копирую / вставляю как злой, как все, все работает прекрасно.

Я сохранил код для объявления 'obj' в делегате NSURLConnection из этого фрагмента кода для простоты. Я также передаю gcc следующее:

gcc -o foo foo.m -lobjc -рамка какао

Спасибо за понимание.

#import <Cocoa/Cocoa.h>

int main (int argc, char *argv[])
{    

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSString * urlstr = @"http://tmp/test.php";
[NSApplication sharedApplication];
NSObject *obj = [[NSObject alloc] init];
NSURL *url = [NSURL URLWithString: urlstr];      
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];

    if([request isKindOfClass:[NSMutableURLRequest class]])
    NSLog(@"request is of type NSMutableURLRequest");


[request setHTTPMethod:@"GET"];
[request setCachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData];
NSURLConnection *connection = [[NSURLConnection alloc]
                             initWithRequest:request
                     delegate:obj
                 startImmediately:YES];

if(connection) 
    NSLog(@"We do have a connection.");

[pool release];
return 0;

}

Ответы [ 2 ]

6 голосов
/ 06 ноября 2008

Другой автор в значительной степени ответил на это за вас, но я подумал, что просто добавлю несколько вещей.

Во-первых, вам не нужно ссылаться на Какао для этого, просто ссылка на платформу Foundation - это нормально. Кроме того, поскольку вам не нужно подключение к Window Server, вы можете избавиться от вызова [NSApplication sharedApplicaiton]. Если вы хотите, чтобы с самого начала было запущено простое консольное тестовое приложение, используйте то, что у вас есть сейчас, и добавьте его перед вызовом [pool realease]:

[[NSRunLoop currentRunLoop] run];

Обратите внимание, однако, что это заблокирует и может фактически никогда не вернуться. Перед вызовом этого вы можете добавить таймер, если вы хотите, чтобы ваш код действительно что-то делал в фоновом режиме :) См. Документацию по NSRunLoop, чтобы узнать, как использовать это.

4 голосов
/ 06 ноября 2008

NSURLConnection - это асинхронный API, основанный на NSRunLoop. Ваш опубликованный код никогда не создает цикл выполнения для запуска соединения. Поэтому я предполагаю, что Cocoa не может создать соединение и поэтому возвращает nil. На что обратить внимание:

1) Что-нибудь в консоли? NSURLConnection создает исключение или регистрирует ошибку?

2) Что произойдет, если вы вместо этого будете использовать синхронный API? + [NSURLConnection sendSynchronousRequest:returningResponse:error:]

3) Какой смысл этого кода? Какао не предназначен для запуска непосредственно из функции main (). Существует ли конкретная причина, по которой вы не используете шаблоны приложений, предоставляемые XCode, которые позаботятся о настройке цикла выполнения, пула автоматического выпуска и т. Д.? * 10101 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...