我有一个登录方法。在该方法中,我使用 NSURLConnection 登录,并且希望返回 NSData 响应。问题是我在连接实际获取数据之前返回了 NSData。
- (NSData*)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
[responseData appendData:data]; //responseData is a global variable
NSLog(@"\nData is: %@", [[[NSString alloc] initWithData:responseData
encoding:NSUTF8StringEncoding]autorelease]);//this works
isLoaded = YES; //isLoaded is a BOOL
}
- (NSData*)login:(NSString*)username withPwd:(NSString*)password{
isLoaded = NO;
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request
delegate:self];
if(connection){
NSLog(@"Connected");
}
while(isLoaded = NO){
[NSThread NSSleepForTimeInterval: 1];
}
isLoaded = NO;
return responseData;
}
程序卡在 while 循环中,但是如果没有 while 循环,程序可以从服务器检索数据,只是该方法似乎在委托(delegate)方法更改它之前返回了responseData。
所以我的问题是如何才能使该方法仅在服务器完成处理后才返回响应数据?
最佳答案
除非另有说明,NSURLConnection 异步加载 URL。它使用委托(delegate)回调来更新委托(delegate)有关 URL 下载进度的信息。
具体来说,利用 NSURLConnection 委托(delegate)的 connectionDidFinishLoading: 方法。一旦加载了所有数据,您的 NSURLConnection 对象将调用此方法。您可以在该方法中返回数据。
您可以同步加载数据,但最终可能会阻塞 UI。
祝你好运!
关于objective-c - NSURLConnection接收到数据后如何返回数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10726982/