我有一个小应用程序应该可以将数据发布到我的Web服务器,它将数据保存在数据库中。现在这就是我现在的代码:
NSData *postData = [urlString dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:@"http://..."]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];
NSURLConnection * connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
if (connection) NSLog(@"Done");
它工作正常。但现在我想检查数据是否正确(并存储在数据库中)或某些内容(如eMail)是错误的。 PHP文件打印例如如果电子邮件不正确,则“电子邮件不正确”。 但是如何在Xcode中获取该数据(哪些PHP打印出来)应用程序知道它是否成功?
感谢您的回答!
答案 0 :(得分:3)
您需要实施NSURLConnectionDelegate
方法connection:didReceiveData:
和connectionDidFinishLoading:
根据文档didReceiveData:
每个NSURLRequest可能被调用多次(即响应并不总是一次全部到达)所以建议的方法是在connection:didReceiveData:
期间将传入数据附加到缓冲区。然后对connectionDidFinishLoading:
中的数据进行任何处理。
你可以在你的班级上创建一个属性:
@property (nonatomic, strong) NSMutableData *dataBuffer;
在viewDidLoad:
- (void)viewDidLoad
{
[super viewDidLoad];
self.dataBuffer = [[NSMutableData alloc] init];
// do any other setup your class requires...
}
然后实现委托方法:
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
// clear the buffer in case it has been used previously
[self.dataBuffer setLength:0];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[self.dataBuffer appendData:data];
}
- (void)connectionDidFinishLoading:(NSURLConnection*)connection
{
NSString *response = [NSString stringWithUTF8String:[self.dataBuffer bytes]]);
NSLog(@"response from HTTP request=>%@", response);
}
这一切都可以使用像ASIHTTPRequest这样的第三方网络库(不再处于积极开发阶段)或AFNetworking来完成,但有时候根据您的尝试情况可能会有些过分完成
答案 1 :(得分:2)
实施NSURLConnection的委托方法
<德尔> - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response。 当请求完成时,app会调用此方法。您可以使用'response'参数访问响应数据。 德尔>- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data;
然后使用以下命令将'data'参数转换为字符串:
NSString *responseString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
然后,您可以搜索您想要的任何字符串的响应,例如“电子邮件不正确”。
PS:我通常不会对HTTP请求使用NSURLConnection / NSURLRequest,我建议您查看ASIHTTPRequest以获取非常简单的HTTP请求/连接。
希望这有帮助。