【问题标题】:NSURLRequest converting NSData to an arrayNSURLRequest 将 NSData 转换为数组
【发布时间】:2011-07-09 02:43:55
【问题描述】:

我需要将通过 PHP 脚本中的数组从 Web 接收到的数据转换为可以从中提取值的数组。这是我的代码!

-(void)connectionDidFinishLoading:(NSURLConnection *)connection{
    //NSString *payloadAsString = [NSString stringWithUTF8String:[receivedData bytes]];
    NSArray *payloadAsString = [NSKeyedUnarchiver unarchiveObjectWithData:receivedData];
    [payloadAsString finishEncoding];
    verified = [payloadAsString objectAtIndex:0];
     NSLog(@"logging");
     //NSString *no = [[NSString alloc] init stringWithCString:verified];
    NSLog(@"%@", verified);
    if([verified isEqualToString:@"admin"]){
    NSLog(@"test admin");
            [self performSelector:@selector(changeViewAdmin) withObject:nil afterDelay:0.05];
        }
        if([verified isEqualToString:@"user"]){
        NSLog(@"test user");
            [self performSelector:@selector(changeView) withObject:nil afterDelay:0.05];
        }
        if([verified isEqualToString:@"No"]){
        NSLog(@"test no");
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
    message:@"Invalid UserName/Password combination!"
    delegate:self
    cancelButtonTitle:@"Okay"
    otherButtonTitles:nil];
    [alert show];
    [alert release];
        }
    [payloadAsString release];
    //NSLog(@"%@", verified);
    //  INSERT GOOGLE MAPS URL REQUEST HERE
    /*if(requestType == 1){
    NSString* addressText = payloadAsString;
    // URL encode the spaces
    addressText =  [addressText stringByAddingPercentEscapesUsingEncoding: NSASCIIStringEncoding];  
    NSString* urlText = [NSString stringWithFormat:@"http://maps.google.com/maps?q=%@", addressText];
    // lets throw this text on the log so we can view the url in the event we have an issue
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlText]];
    // */
    //
    //}
    [connection release];
    self.receivedData = nil;
}

不幸的是,我的控制台返回 null 并询问我是否已将 -finishencoding 方法放入。问题是,如果正确,我会在哪里这样做?

PS:另一个问题是,如果我从数据库中检索数据数组,PHP 脚本是最好的方法吗?谢谢。

【问题讨论】:

    标签: iphone arrays authentication nsdata nsurl


    【解决方案1】:

    1) 在所有这些代码中,与您的问题相关的唯一字符串是

    NSArray *payloadAsString = [NSKeyedUnarchiver unarchiveObjectWithData:receivedData];
    

    我真的怀疑 PHP 脚本会以与 NSKeyedUnarchiver 兼容的格式返回数据。我相信你没有从这个方法得到 NSInvalidArgumentException 异常的唯一原因是 receivedDatanil (你有没有在任何地方初始化它?)。尝试从您收到的内容中创建一个字符串

    [[[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding] autorelease]
    

    并记录下来。由此,我希望清楚如何解析响应。

    2) 不要将 NSArray 实例命名为“blahBlahString”。字符串和数组完全不同。

    【讨论】:

    • 您的回答没有帮助,也没有解决我的问题。我正在寻找可以解释如何将 PHP 脚本中调用的数组转换为 iPhone 程序中可用的数组的人。相反,你所做的只是试图侮辱我作为程序员的能力。如果您能编辑您的回复以使其有用,我将不胜感激。谢谢。
    • 我没有侮辱任何人的意思。您遇到的问题已在第 1 点中尽可能以我的卑微技能进行介绍,如果还不够,请见谅。如果您真的想获得帮助,我的建议是 - 使用 PHP sn-p 更新您的帖子,它会在您的应用程序 中使用我在响应中谈到的字符串生成输出。祝你好运。
    • 刚刚了解到 PHP 数组是与 iPhone 数组不同的数据类型,因此无论如何都无法进行转换。 :/感谢您的宝贵时间。
    【解决方案2】:

    NSKeyedUnarchiver 只能取消归档由 NSKeyedArchiver 类的实例生成的实例。

    https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSKeyedUnarchiver_Class/index.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-11
      相关资源
      最近更新 更多