Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.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
在NSData中发送php对象和变量_Php_Iphone_Objective C_Nsdata - Fatal编程技术网

在NSData中发送php对象和变量

在NSData中发送php对象和变量,php,iphone,objective-c,nsdata,Php,Iphone,Objective C,Nsdata,实际上,我正在尝试发送一个php变量(表示“您现在已连接!”)。 我想知道如何使用NSData在我的iphone应用程序中恢复此变量 我的代码如下: NSMutableURLRequest *Requete = [NSMutableURLRequest requestWithURL:url]; [Requete setHTTPMethod:@"POST"]; // On passe les variables [Requete setHTTPBody:[[NSString stringWi

实际上,我正在尝试发送一个php变量(表示“您现在已连接!”)。 我想知道如何使用NSData在我的iphone应用程序中恢复此变量

我的代码如下:

NSMutableURLRequest *Requete = [NSMutableURLRequest requestWithURL:url];

[Requete setHTTPMethod:@"POST"];

// On passe les variables

[Requete setHTTPBody:[[NSString stringWithFormat:@"email=%@ &   
password=%@",email,password]dataUsingEncoding:NSASCIIStringEncoding]];

NSURLResponse *response;
NSError *error;

NSData *result = [NSURLConnection sendSynchronousRequest:Requete returningResponse:&response error:&error];      

NSString *test = [[NSString alloc]initWithData:result encoding:NSASCIIStringEncoding];
NSLog(test);
我的phpscript中有一个echo“Connected!”。我想恢复变量return$Connected=1。 当我运行此命令时,控制台打印已连接!而不是1; 再也不知道要恢复一个php对象,要执行完全相同的过程吗

谢谢大家,


Quentin

PHP在服务器端执行,这意味着移动(或其他)客户端将无法再使用所有变量,除非您明确定义它们(通过回显它们)

所以你有两个选择:

  • 将webscript编辑为
    echo“$$connected=1”这样,您将在NSData中将其作为输出检索。请注意,这将不是一个iphone变量。要使其成为iphone变量,必须对PHP输出进行JSON编码:
    {“connected”:1}
    或让PHP文件生成PLIST。然后使用适当的JSON/PLIST反序列化程序反序列化NSData

  • 您可以编辑iOS应用程序,将NSData转换为字符串,然后将其与@“Connected!”进行比较。如果匹配,则创建一个本地iOS变量(int?)并将其设置为1

  • 方法2是最简单的,因为您已经有了
    *测试
    。只是:

    if ([test rangeOfString:@"Connected!"] > 0 ) test = @"1";
    
    使用方法1,您必须

    NSMutableDictionary *mydict = [NSJSONSerialization JSONObjectWithData:result options:NSJSONReadingMutableContainers|NSJSONReadingMutableLeaves error:&error];
    test = [mydict objectForKey:@"connected"];
    
    顺便说一句,如果您的url变量之间的空格不是故意为了StackOverflow可读性而添加的,您应该删除它们,即
    user=%@&pass=%@
    而不是
    user=%@&pass=%@


    PS——如果您使用的是iOS SDK<5,则必须使用第三方工具处理JSON序列化/反序列化,例如JSONKit、JSON、touchJSON等。

    PHP在服务器端执行,这意味着您的移动设备(或其他)将无法再使用您的所有变量除非您明确定义客户机,否则客户机确实存在(通过回显它们)

    所以你有两个选择:

  • 将webscript编辑为
    echo“$$connected=1”这样,您将在NSData中将其作为输出检索。请注意,这将不是一个iphone变量。要使其成为iphone变量,必须对PHP输出进行JSON编码:
    {“connected”:1}
    或让PHP文件生成PLIST。然后使用适当的JSON/PLIST反序列化程序反序列化NSData

  • 您可以编辑iOS应用程序,将NSData转换为字符串,然后将其与@“Connected!”进行比较。如果匹配,则创建一个本地iOS变量(int?)并将其设置为1

  • 方法2是最简单的,因为您已经有了
    *测试
    。只是:

    if ([test rangeOfString:@"Connected!"] > 0 ) test = @"1";
    
    使用方法1,您必须

    NSMutableDictionary *mydict = [NSJSONSerialization JSONObjectWithData:result options:NSJSONReadingMutableContainers|NSJSONReadingMutableLeaves error:&error];
    test = [mydict objectForKey:@"connected"];
    
    顺便说一句,如果您的url变量之间的空格不是故意为了StackOverflow可读性而添加的,您应该删除它们,即
    user=%@&pass=%@
    而不是
    user=%@&pass=%@


    PS——如果您使用的是iOS SDK<5,则必须使用第三方工具处理JSON序列化/反序列化,例如JSONKit、JSON、touchJSON等。

    非常感谢您的快速回答!两种解决方案似乎都很有趣。我将尝试一下。所以,我想如果我想发送一个php对象,最好使用JSON解决方案,当然。我会使用第一种解决方案。您可以使用
    json\u encode($myphpobj)
    。也可以对数组使用相同的json_编码。然后,您将使用方法#1在NSMutableDictionary中重新创建对象。非常感谢您的快速回答!两种解决方案似乎都很有趣。我将尝试一下。所以,我想如果我想发送一个php对象,最好使用JSON解决方案,当然。我会使用第一种解决方案。您可以使用
    json\u encode($myphpobj)
    。也可以对数组使用相同的json_编码。然后使用方法#1在NSMutableDictionary中重新创建对象。