1

我正在努力扩展我制作的现有应用程序的功能,该应用程序显示来自 Big Commerce 商店的内容。基本上,我希望应用程序能够检查用户在 iPhone 上输入的电子邮件地址是否存在于客户列表中,然后基于此执行操作。我有一个 API 密钥和调用方法来获取客户列表,但不确定如何最好地在 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.)"}
4

1 回答 1

0

首先,错误意味着 kCFURLErrorUserCancelledAuthentication。

您的代码中有几个问题:

  1. 不要从主线程调用同步网络请求(太糟糕了!)因为网络请求可能需要几秒钟到一分钟,它会阻塞主线程,从而阻塞 UI。

  2. 如果您希望您的应用程序与蜂窝连接一起工作,请不要将超时设置得太短。默认是好的。更好的是,将其设置得非常高,让用户取消它(这需要NSURLConnection在异步模式下使用)。

  3. 正确检查错误。基本上,将指向NSError对象指针的指针作为最后一个参数的方法通过其返回值指示成功或失败。也就是说,为了确定是否有错误,只检查返回值!当且仅当返回值指示错误时,错误参数可能指向一个有意义的NSError对象。

  4. 在客户端身份验证的情况下,请求无法进行身份验证的原因是“众所周知的”凭据存储(密钥链)中可能没有凭据。为了实现一些您自己设置凭据的自定义身份验证方法,您必须NSURLConnection在异步模式下使用并实现委托方法。也可能有其他原因。

为了完成这项任务,你现在应该做的是

  1. 在异步模式下使用NSURLConnection- 您可能需要实现委托方法connection:willSendRequestForAuthenticationChallenge:

  2. 确保您正确设置请求的标头,例如设置“Content-Type”标头和可能的“Accept”标头不会造成伤害。

  3. 修复超时(将其保留为默认值)。

  4. 正确检查错误。

  5. 检查响应,即状态代码和 Content-Type,如果这是您所期望的。

  6. 处理响应数据。

  7. connection:willSendRequestForAuthenticationChallenge:根据给定的身份验证挑战实施。

于 2013-07-03T21:22:49.667 回答