我想问一下关于iPhone的objective-c中的NSURLConnection
。
我有一个应用需要连接到一个网络服务才能接收数据(关于YouTube视频), 然后我就拥有了连接所需的所有东西(类似于Web中的Hello_Soap示例代码)。
但是现在,我的问题是我创建了一个名为NSObject
的类(继承自Connection
)并且我已经实现了这些方法:
didReceiveResponse
,didReceiveData
,didFailWithError
和connectionDidFinishLoading
。方法也是:
-(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];
我调用此方法,一旦完成,它就不会继续调用didReceiveResponse
,didReceiveData
,didFailWithError
或connectionDidFinishLoading
。
我正在努力做到这一点,但目前我还不能。
我想做的是每次我想要接收数据时都能调用此类“连接”(之后要在UITableView
s中进行解析和显示)。
谢谢。
答案 0 :(得分:0)
我要探索的一个起点是不要将你的班级命名为“连接”。 Objective-C中没有名称空间,并且名称为“Connect”通用名称,其他同名类可能会导致问题。
约定是预先添加与项目或公司相关的几个字符,例如,如果您的项目名为Amazing Thing,则可以将类命名为“ATConnector”。您可以在.h文件中突出显示类名,并使用“重构”菜单命令在修复其他引用时轻松更改它。
此外,如果您在调用后释放Connect类或NSURLconnection,那么您将看到没有调用委托方法的效果 - 但这很难从存在的代码中确定。