我正在努力扩展我制作的现有应用程序的功能,该应用程序显示来自Big Commerce商店的内容。基本上,我希望应用程序能够检查用户在iPhone上键入的电子邮件地址是否存在于“客户”列表中,然后根据此操作执行操作。我有一个API Key和Call方法来获取Customer列表,但我不确定如何最好地在iOS上执行此操作。有人可以给我一些关于我需要做什么来指点这一点吗?
更新:到目前为止我使用了以下代码:
-(IBAction)gettingcustomers {
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"mystoreserver.customers.json"]
cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData
timeoutInterval:10];
[request setHTTPMethod: @"GET"];
NSError *requestError;
NSURLResponse *urlResponse = nil;
NSData *response1 = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&requestError];
NSLog(@"%@", requestError);
}
日志中的错误显示:
Error Domain=NSURLErrorDomain Code=-1012 "The operation couldn’t be completed. (NSURLErrorDomain error -1012.)" UserInfo=0xa7d12e0 {NSErrorFailingURLKey=mystoreserver.customers.json, NSErrorFailingURLStringKey=mystoreserver.customers.json, NSUnderlyingError=0xa7da430 "The operation couldn’t be completed. (kCFErrorDomainCFNetwork error -1012.)"}
答案 0 :(得分:0)
首先,错误意味着kCFURLErrorUserCancelledAuthentication。
您的代码中存在一些问题:
不要从主线程调用同步网络请求(大笨蛋!)由于网络请求可能需要几秒钟到一分钟,它将阻止主线程,从而阻止UI。
如果您希望应用程序使用蜂窝连接,请不要将超时设置为短。默认为OK。更好的是,设置它非常高,让用户取消它(这需要在异步模式下使用NSURLConnection
。)
正确检查错误。基本上,具有指向NSError
对象指针作为最后一个参数的指针的方法指示其返回值的成功或失败。也就是说,为了弄清楚是否存在错误仅检查返回值!当且仅当返回值指示错误时,error参数可能指向有意义的NSError
对象。
在客户端身份验证的情况下,请求无法进行身份验证的原因是“知名”凭据存储(密钥链)中可能没有凭据。为了实现一些您自己设置凭据的自定义身份验证方法,您必须在异步模式下使用NSURLConnection
并实现委托方法。也可能有其他原因。
现在你应该做什么来完成这项任务,是
在异步模式下使用NSURLConnection
- 您可能需要实施委托方法connection:willSendRequestForAuthenticationChallenge:
。
确保您正确设置了请求的标头,例如设置“Content-Type”标题并可能设置“Accept”标题也没什么坏处。
修复超时(保留默认值)。
正确检查错误。
检查响应,即状态代码和内容类型,如果这是您所期望的。
处理回复数据。
根据给定的身份验证质询实施connection:willSendRequestForAuthenticationChallenge:
。