2012-04-05 3 views
1

Я на самом деле пытаюсь отправить переменную php (чтобы сказать «Вы теперь подключены!»). Я хотел бы знать, как восстановить эту переменную в моем приложении iphone, используя NSData.Отправить php-объект и переменную в NSData

Мой код выглядит следующим образом:

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); 

У меня есть эхо "Connected!" в моем phpscript.I хочу восстановить мою переменную return $ connected = 1. Когда я запускаю эту консольную печать Connected! а не 1; Кроме того, я не собираюсь делать точно такой же процесс, чтобы восстановить php-объект?

Спасибо и все,

Квентин

ответ

1

PHP выполняется на стороне сервера, что означает все переменные больше не будут доступны на Ваш мобильный телефон (или иначе) клиенты, если вы явно не определить их действительно будет там (посредством эхо-сигнала).

Так у вас есть два варианта:

  1. Корректировать WebScript к echo "$$connected=1"; Таким образом, вы будете извлечь, что как выход в вашем NSData. Обратите внимание, что это НЕ будет переменной iphone. Чтобы сделать его переменной iphone, вам нужно будет сделать что-то вроде JSON, закодировать ваш вывод PHP: {"connected":1} Или у вашего php-файла есть PLIST. И затем обесценивайте NSData, используя соответствующий JSON/PLIST deseralizer.

  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"]; 

BTW, если промежутки между вашими переменными URL-адрес не был намеренно добавлен для StackOverflow читаемости, вы должны удалить их, т.е. user=%@&pass=%@ вместо от user=%@ & pass=%@.

PS - Если вы используете IOS SDK < 5, вам придется обрабатывать JSON seralization/deseralization используя сторонний инструмент, например JSONKit, JSON, touchJSON и т.д ..

+0

Большое спасибо для вашего быстрого ответа! Оба решения кажутся интересными. Я собираюсь попробовать. Итак, я полагаю, что если я хочу отправить php-объект, мне было бы лучше использовать решение JSON? – Quentin91360

+0

Абсолютно. Я бы использовал первое решение. Вы можете использовать 'json_encode ($ myphpobj)'. Вы также можете использовать тот же json_encode для массивов. Затем вы создадите свой объект в NSMutableDictionary, используя метод # 1. –

+0

Спасибо, парень! Ты жжешь ;-) – Quentin91360

Смежные вопросы