我在 iPhone 应用程序中使用 NSURL、NSURL[Mutable]Request、NSURLConnection 取得了巨大的成功。当尝试编译一个独立的 Cocoa 应用程序时,10 行程序发出一个简单的 HTTP 请求,编译器错误或警告为零。该程序编译正常,但从未向我的 Web 服务器发出 HTTP 请求(我正在运行 tcpdump 并并行查看 Apache 日志)。当我在 iPhone 应用程序中运行非常相似的代码时,基本上复制/粘贴就像那样邪恶,一切都很好。
为了简单起见,我将 NSURLConnection 委托(delegate)中的“obj”声明代码保留在这段代码片段之外。我还将以下内容传递给 gcc:
gcc -o foo foo.m -lobjc -framework cocoa
感谢您的任何见解。
#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;
}
最佳答案
其他发帖者几乎已经为您回答了这个问题,但我想我只需要添加一些内容。
首先,您真的不需要为此链接到 Cocoa,只需链接到 Foundation 框架就可以了。此外,由于您不需要连接到 Window Server,因此您可以摆脱 [NSApplication sharedApplicaiton] 调用。如果您只想从一个简单的控制台测试应用程序开始,请使用您现在拥有的并在 [pool realease] 调用之前添加它:
[[NSRunLoop currentRunLoop] 运行];
但是请注意,这会阻塞并且实际上可能永远不会返回。在调用它之前,如果您希望您的代码在后台实际执行某些操作,您可以添加一个计时器 :) 请参阅有关 NSRunLoop 的文档以了解更多使用方法。
关于objective-c - Cocoa:NSURLConnection 不尝试 HTTP 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/267163/