NSURLConnection对象忽略它的已实现方法

时间:2012-02-01 16:03:10

标签: ios delegates nsurlconnection

我的问题与我的单线程应用程序中的代码有关,该应用程序通过NSURLConnection将设备的本地数据库数据更新为Web服务。

我的NSURLConnection初始化没有进入任何实现的方法,它让我感到困惑。 在我的AppDelegate.m中 - > applicationDidFinishLaunching方法,我正在创建一个NSURLConnection对象:

//AppDelegate.m
- (void)applicationDidFinishLaunching:(UIApplication *)application
{

   // ... Building request URL here ...

   NSString *requestURL = [NSString stringWithFormat:@"%@%@", URI,urlEncodedParamStr]
   NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:requestURL]];
   NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];

   responseData = [[NSMutableData data] retain];

   if(connection !=nil)
      [connection release];

}

现在应该执行以下任何适当的NSURLConnection方法 我在AppDelegate.m中实现:

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{[responseData setLength:0];}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {[responseData appendData:data];}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection{//my implementation}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {//my implementation} 

但是,执行继续,直接在NSURLConnection *连接的init之后的行,不执行任何NSURLConnection实现的方法。我已经确认请求不是nil并且在实现的NSURLConnection方法中放置了断点 - 它们没有被调用。

Debugging session screenshot

发生了什么事?

一如既往地谢谢!

1 个答案:

答案 0 :(得分:4)

您需要致电

[connection start];
实际启动远程调用之前

即使这样,下一行代码也会执行。这是一个异步调用,在后台线程中执行。稍后会收到响应,然后将调用您的connection...方法(可以在以后超时(30秒))。