我使用NSURLConnection和NSURLConnectionDelegate协议将用户名和密码从iPhone客户端输入到服务器上。一旦服务器接收到URL,服务器上提供的web服务将以JSON格式填充一些数据,并将其发送回iPhone客户端。
我的WebserviceDelegate类使用NSURLConnectionDelegate协议。
@implementation WebserviceDelegate
- (id)initWithURL:(NSURL *)url
{
if (self = [super init])
{
responseData = [NSMutableData data];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
connection = [NSURLConnection connectionWithRequest:request delegate:self];
[connection start];
}
return self;
}
...
@end现在,我想验证从服务器获得的响应是否告诉我是否已登录。要做到这一点,web服务发送的数据将有一个名为"status“的字典键。如果"status“为"true”,则意味着成功登录。如果看到"false“,就意味着登录失败。
但是在iPhone结束时,我不知道如何实现上述逻辑,因为:
请求是异步的,所以当我试图在自定义方法中验证状态键时,我会得到空值。(responseDict是在.h文件中定义的变量,其值从
(NSURLConnection*)连接didReceiveData:(NSData *)数据
(在我的WebserviceDelegate课上)
NSString *status = [responseDict objectForKey:@"status"];
NSLog(@"status = %@", status);
if ([@"true" isEqualToString:status]) {
return YES;
}
else {
return NO;
}发布于 2012-08-14 06:47:28
这实际上取决于您在服务器上执行的身份验证类型。
例如,如果您正在使用基本的http身份验证,您可以轻松地在头中发送凭据,如果成功则期望得到200次返回,如果没有成功则期望得到4xx。如果您正在进行其他类型的身份验证,如您在这里描述的,这意味着您将得到一个200响应,无论结果,只要你连接,所以你会读字典,你说是这样。
在这种情况下,只有等待响应执行以下操作。您可以采取几种方法,例如:
在委托方法中执行您想要执行的任何操作,以便如果身份验证成功,则在响应到达时完成。
您还可以在另一个线程中发送同步请求,并在那里执行以下任务。因为它不在主线程中,所以它不会阻塞gui,并且由于验证用户不应该花费那么长的时间,它不会对这个线程产生那么大的影响。
(不过,您可以做的最简单的事情就是让成功或不成功的路径从委托方法中执行)
https://stackoverflow.com/questions/11946076
复制相似问题