2012-07-05 283 views
2

我已经完成了的指示。我为测试目的创建了一个控制台项目。然后我创建了一个名为RequestSender的类(请参阅下面的代码),并在主函数中创建了此类的一个实例。为什么我的NSURLConnection委托方法不被调用?

RequestSender.h:

#import <Foundation/Foundation.h> 
@interface RequestSender : NSObject <NSURLConnectionDelegate> { 
    NSMutableData* d; 
} 
@end 

RequestSender.m:

#import "RequestSender.h" 

@implementation RequestSender 

- (id)init { 
    self = [super init]; 
    if (self) { 
     NSString* s = @"http://www.apple.com/"; 
     NSURL* u = [[NSURL alloc] initWithString:s]; 
     NSURLRequest* r = [[NSURLRequest alloc] initWithURL:u]; 
     NSURLConnection* c = [[NSURLConnection alloc] initWithRequest:r delegate:self]; 
     if (c) { 
      d = [NSMutableData data]; 
     } 

     return self; 
    } else { 
     return nil; 
    } 
} 

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { 
    [d setLength:0]; 
} 

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { 
    [d appendData:data]; 
} 

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { 

} 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection { 
} 


@end 

这无疑将在主线程和默认的运行循环中执行。然而,非授权方法被调用。

我做了很多测试并阅读了很多帖子,但我仍然没有线索。

请帮帮我。这让我发疯。 Thanx!

+0

你的代码看起来还好。你怎么称呼它?它是如何嵌入你的应用程序? – Codo

+0

你的代码是绝对正确的。检查自己是否为空? –

+0

@代码:它不在我的应用程序中。我创建了一个控制台项目来测试它。所有文件都在上面列出。唯一额外的代码在主函数中,如“RequestSender * rs = [[RequestSender alloc] init];”。我在每个代表团方法中添加了断点,但没有一个被捕获。 –

回答

0

我相信你错过了开始连接的部分。连接类为此提供了另一种方法,或者您可以将其称为“c”对象。

NSURLConnection* c = [[NSURLConnection alloc] initWithRequest:r delegate:self]; 
if (c) { 
    d = [NSMutableData data]; 
    [c start]; 
} 

NSURLConnection* c = [[NSURLConnection alloc] initWithRequest:r delegate:self startImmediately:YES]; 
if (c) { 
    d = [NSMutableData data]; 
} 
+0

此外,哇 - 没有意识到这个问题是那么古老。我希望你能够解决它,而不是等待答案! – shortstuffsushi

相关问题