实现NSURLConnectionDataDelegate的连接类

时间:2009-07-09 19:05:01

标签: ios objective-c nsurlconnection nsurlconnectiondelegate

我想问一下关于iPhone的objective-c中的NSURLConnection

我有一个应用需要连接到一个网络服务才能接收数据(关于YouTube视频), 然后我就拥有了连接所需的所有东西(类似于Web中的Hello_Soap示例代码)。

但是现在,我的问题是我创建了一个名为NSObject的类(继承自Connection)并且我已经实现了这些方法: didReceiveResponsedidReceiveDatadidFailWithErrorconnectionDidFinishLoading。方法也是:

-(void)Connect:(NSString *) soapMessage{
    NSLog(soapMessage);

    NSURL *url = [NSURL URLWithString:@"http://....."];
    NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url];
    NSString *msgLength = [NSString stringWithFormat:@"%d", [soapMessage length]];


    [theRequest addValue: @"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
    [theRequest addValue: msgLength forHTTPHeaderField:@"Content-Length"];
    [theRequest setHTTPMethod:@"POST"];
    [theRequest setHTTPBody: [soapMessage dataUsingEncoding:NSUTF8StringEncoding]];

    NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];

    if( theConnection )
    {
        webData = [[NSMutableData data] retain];
    }
    else
    {
        NSLog(@"theConnection is NULL");
    }
}

但是当我从AppDelegate创建一个Connection对象时:

Connection * connect = [[Connection alloc] Init:num]; //It's only one param to test.
[connect Connect:method.soapMessage];

我调用此方法,一旦完成,它就不会继续调用didReceiveResponsedidReceiveDatadidFailWithErrorconnectionDidFinishLoading。 我正在努力做到这一点,但目前我还不能。

我想做的是每次我想要接收数据时都能调用此类“连接”(之后要在UITableView s中进行解析和显示)。

谢谢。

1 个答案:

答案 0 :(得分:0)

我要探索的一个起点是不要将你的班级命名为“连接”。 Objective-C中没有名称空间,并且名称为“Connect”通用名称,其他同名类可能会导致问题。

约定是预先添加与项目或公司相关的几个字符,例如,如果您的项目名为Amazing Thing,则可以将类命名为“ATConnector”。您可以在.h文件中突出显示类名,并使用“重构”菜单命令在修复其他引用时轻松更改它。

此外,如果您在调用后释放Connect类或NSURLconnection,那么您将看到没有调用委托方法的效果 - 但这很难从存在的代码中确定。