Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 我怎样才能避开这个连接错误?_Iphone_Objective C_Ios4_Nsurlconnection - Fatal编程技术网

Iphone 我怎样才能避开这个连接错误?

Iphone 我怎样才能避开这个连接错误?,iphone,objective-c,ios4,nsurlconnection,Iphone,Objective C,Ios4,Nsurlconnection,我目前正在构建一个iOS应用程序,它使用Kosmaczewski的Objective-C REST客户端/包装器连接到公共API 此公共API使用HTTPS上的基本身份验证 我遇到的问题是,当我试图使用包装器的接口提供用户名/密码时,它崩溃了。在进行了一些搜索之后,我相信这与以下两个线程中讨论的一个bug有关: 目前,为了继续开发,我在URL中以以下格式提供用户名/密码: 我真的需要找到一个解决方法来正确的解决这个问题。我不喜欢通过生成base64编码字符串并修改身份验证头来绕过它。我也

我目前正在构建一个iOS应用程序,它使用Kosmaczewski的Objective-C REST客户端/包装器连接到公共API

此公共API使用HTTPS上的基本身份验证

我遇到的问题是,当我试图使用包装器的接口提供用户名/密码时,它崩溃了。在进行了一些搜索之后,我相信这与以下两个线程中讨论的一个bug有关:

目前,为了继续开发,我在URL中以以下格式提供用户名/密码:

我真的需要找到一个解决方法来正确的解决这个问题。我不喜欢通过生成base64编码字符串并修改身份验证头来绕过它。我也不想离开这个包装器(它很容易实现)而使用类似AsittpRequest的东西

所以我的问题是:这真的是一个bug吗?对发生的事情还有其他解释吗?你建议用什么技巧来绕过它

如果您想查看任何代码,请查看包装器,因为我只是在实现它


多谢

虽然您不想离开包装器类,但这听起来像是包装器类中的一个bug。如果NSUrlConnection单独使用,则不会出现此问题,而且它也非常容易实现。下面是一些示例代码,用于处理使用HTTP身份验证的REST服务(如果您选择使用该路径)。很简单


-(void)makeConnection{

    NSURL *statusURL = [[NSURL alloc] initWithString:@"URLHERE"];
    NSURLRequest *request = [[NSURLRequest alloc] initWithURL:statusURL];
    //change this to GET/PUT/POST/whatever you need
    [request setHTTPMethod:@"PUT"];

    NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self];

    [statusURL release];
    [request release];

    [conn start];

    [conn release];

    responseData = [[NSMutableData alloc] init];
}

-(void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
{
    if ([challenge previousFailureCount] == 0) 
    {
        NSLog(@"Sending credentials");

        NSURLCredential *newCredential;
        newCredential = [NSURLCredential credentialWithUser:@"USERNAME" password:@"PASSWORD" persistence:NSURLCredentialPersistencePermanent];
        [[challenge sender] useCredential:newCredential forAuthenticationChallenge:challenge];
    }
    else
    {
        [[challenge sender] cancelAuthenticationChallenge:challenge];

        // inform the user that the user name and password
        // in the preferences are incorrect
        NSLog(@"credentials are no good :(");
    }   
}

我会避免使用包装器,因为URL加载系统本身非常强大,引入更多的复杂性总是会引入更多的bug:)

有关更多信息: