Мне не хватило места для комментариев в заметках. Вот окончательный код. Хотя не то, что я хотел, он выполняет свою работу:
Чтобы заставить JSONValue работать, мне пришлось скачать и включить в свой проект json frameowrk, как показано здесь:
https://github.com/stig/json-framework
Как только я это установил, я получил неполную ошибку от функции JSONValue. мой исходный URL-запрос на мой PHP-запрос страницы предоставлял JSON-ответ следующим образом:
{
«успех»: «0»,
"AccountID:" 4 ",
"ошибка": ""
} * +1010 *
По какой-то причине функции JSONValue не понравился этот вывод, и мне пришлось изменить его на более базовую, менее предпочтительную версию, следующим образом:
[ "0", "4", ""]
После того, как у меня получилось, окончательная копия кода выглядит следующим образом:
В моем главном представлении, которое загружается при запуске приложения, я добавил следующее, чтобы определить, существует ли существующий идентификатор учетной записи, и запустить представление «Вход в систему», если оно отсутствует:
- (void)viewDidLoad
{
NSString *accountID = [[NSUserDefaults standardUserDefaults] stringForKey:@"AccountID"];
if (![accountID length]) {
UIViewController *login = [self.storyboard instantiateViewControllerWithIdentifier:@"Login"];
[self presentModalViewController:login animated:YES];
}
[super viewDidLoad];
}
Логин - это не более чем 2 текстовых поля и кнопка для аутентификации.
Это функция, которую я добавил к кнопке, и она работает в настоящее время:
-(IBAction)authenticate:(id)sender{
// This will be the validation code
// First we'll grab the field values
NSString *currentEmail = emailField.text;
NSString *currentPassword = passField.text;
// Now we will grab the user default settings (saved preferences)
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
// build the request to update status
NSString *myURL = [NSString stringWithFormat:@"http://www.myurl.com/auth.php?e=%@&p=%@",currentEmail,currentPassword];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; [request setURL:[NSURL URLWithString:myURL]];
[request setHTTPMethod:@"GET"];
NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *responseString = [[NSString alloc] initWithData:returnData encoding: NSUTF8StringEncoding];
NSArray *responseArray = [responseString JSONValue];
NSString *success = [responseArray objectAtIndex:0];
NSString *AccountID = [responseArray objectAtIndex:1];
NSString *error = [responseArray objectAtIndex:2];
if([success boolValue]) {
NSLog(@"User is Authenticated");
UIAlertView *auth1 = [[UIAlertView alloc] initWithTitle:@"T-of-U" message:@"Successfully Authenticated" delegate:self cancelButtonTitle:@"ok" otherButtonTitles: nil];
[auth1 show];
[defaults setObject:AccountID forKey:@"AccountID"];
[self dismissModalViewControllerAnimated:YES];
} else {
NSString *authMessage = error;
UIAlertView *auth2 = [[UIAlertView alloc] initWithTitle:@"Authentication Failed:" message:authMessage delegate:self cancelButtonTitle:@"ok" otherButtonTitles: nil];
[auth2 show];
}
}
Я бы предпочел пару ключей-значений NSDictionary, но каждый раз, когда я отправлял ответ json с парами ключей-значений, JSONValue не удавалось, поэтому я заканчивал тем, что просто делал это простым ответом json и ссылочными объектами в массивах, чтобы получить мои переменные .
если есть способ получить пары значений ключа в словарь, что было бы замечательно, хотя я, возможно, и не формирую свой ответ json должным образом (PHP имеет метод json_encode ($ data), который создает json, как и ожидалось, но Функция Objective C не будет ее анализировать).