如何将php返回NSData转换为NSDictionary

时间:2010-08-19 17:43:41

标签: iphone objective-c nsurlconnection

HI, 我正在为我的iphone应用程序创建一个登录屏幕。我使用NSURLConnection方法将用户名和密码发送到php。我可以成功发送登录详细信息到PHP。我的php页面根据登录详细信息返回状态值。

(状态=正常/失败,redirectionUrl = http://www.balalaa.com

在DidReceiveData方法中,如果我将NSData转换为字符串,我将获得以下字符串以便成功登录

“状态=确定& url = http://www.balalaa.com”。

有没有办法获取STATUS和url的值,而不使用NSPredict。有没有其他方法可以将NSData转换为NSDictionary来获取STATUS键的值?

提前致谢。 拉姆

3 个答案:

答案 0 :(得分:2)

NSString *urlDataString = //Whatever data was returned from the server as an NSString
NSArray *parameters = [urlDataString componentsSeparatedByString:@"&"];
NSMutableDictionary *parameterDictionary = [NSMutableDictionary dictionary];
for (NSString *parameter in parameters) {
   NSArray *parameterComponents = [parameter componentsSeparatedByString:@"="];
   [parameterDictionary setObject:[parameterComponents objectAtIndex:1]
                           forKey:[parameterComponents objectAtIndex:0]];
}

另一方面,NSScanner将为您提供一种更有效的方法,无论哪种方式,您都必须取消从字典中获取的任何值和密钥。

答案 1 :(得分:0)

你可以使用plist的php实现,可以在这里找到

http://code.google.com/p/cfpropertylist/

它允许你创建plist,然后向它添加一个NSDictionary,然后将字符串,数组,数据或更多字典添加到初始字典中。 您可以以xml格式或二进制形式回显plist,二进制文件虽然更好,但它更小,因此数据量更少。 一些谷歌搜索应该提供一些很好的例子,而doco非常好。 希望这会有所帮助。

答案 2 :(得分:0)

尝试使用此函数来解析NSData,我在辅助类中使用它。它使用JSONDecoder for iOS< 5

+ (NSDictionary *) JSONObjectWithData:(NSData *)data {
    Class jsonSerializationClass = NSClassFromString(@"NSJSONSerialization");
    if (!jsonSerializationClass) {
        //iOS < 5 didn't have the JSON serialization class
        JSONDecoder *parser = [[JSONDecoder alloc] init];
        return [parser objectWithData:data];
    }else{
        NSError *error = nil;
        NSDictionary *dict_response = [[NSMutableDictionary alloc] init];
        dict_response = [NSJSONSerialization JSONObjectWithData:data options:NSJSONWritingPrettyPrinted error:&error];
        return dict_response;
    }
    return nil;
}