1

我实际上是在尝试发送一个 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 中。我想恢复我的变量 return $connected=1。当我运行它时,控制台打印已连接!而不是 1;再说了,我不知道为了恢复一个 php 对象要执行完全相同的过程吗?

谢谢大家,

昆汀

4

1 回答 1

1

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

所以你有两个选择:

  1. 将您的 webscript 编辑为echo "$$connected=1";这样,您将检索它作为 NSData 中的输出。请注意,这将不是一个 iphone 变量。要使其成为 iphone 变量,您必须执行 JSON 编码 PHP 输出之类的操作:{"connected":1}或者让您的 php 文件生成 PLIST。然后使用适当的 JSON / PLIST 反序列化器反序列化 NSData。

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

方法 2 是最简单的,因为您已经拥有*test. 只是:

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 等。

于 2012-04-05T15:51:20.457 回答