objective-c - NSURLConnection接收到数据后如何返回数据

标签 objective-c cocoa nsurlconnection

我有一个登录方法。在该方法中,我使用 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/

相关文章:

iphone - cocos2d - 子项已添加。无法再次添加

cocoa - 从 NSColor 中提取 32 位 RGBA 值

objective-c - 用于 mac os x 应用程序开发的 aws sdk

ios - 从 ScrollView 调用 MFMailComposeViewController

ios - 是否可以捕获第三方 iOS 库异常?

ios - 如何使用 Facebook Pop 放慢动画速度?

objective-c - Mac OS X 代理上同步请求的随机错误

ios - 指向作为参数传入的协议(protocol)的指针

objective-c - 无法使用不同的 NSURL 凭据进行身份验证(使用旧的已删除凭据)

ios - 如何使用swift将Json作为参数发送到url中