Хорошо, давайте пройдем этот шаг за раз.
Вы можете легко создать NSDictionary
из JSON, используя одну из нескольких различных библиотек анализа JSON. Мне действительно нравится использовать JSONKit . После того, как вы импортировали JSONKit
в свой проект, вы можете сделать что-то вроде этого:
NSString *url = @"http://dev.speechlink.co.uk/David/get_questionstest.php";
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:url]];
NSString *json = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSDictionary *questions = [json objectFromJSONString];
[json release];
Теперь у вас есть массив, заполненный вопросами в вашем примере. Теперь вы можете перебрать этот массив и заполнить ваши данные данными в массиве. Теперь давайте будем практичными. Было бы проще, если бы вам просто пришлось управлять одним объектом вместо четырех для каждого вопроса, не так ли? Давайте создадим класс, который содержит один вопрос на каждый экземпляр.
Интерфейс:
@interface Question : NSObject {
NSString *questionId;
NSString *question;
NSString *questionNumber;
NSString *sectionId;
}
@property(copy)NSString *questionID;
@property(copy)NSString *question;
@property(copy)NSString *questionNumber;
@property(copy)NSString *sectionId;
@end
И реализация:
@implementation Question
@synthesize questionId, question, questionNumber, sectionID;
@end
Теперь это просто базовый пример. Ничего фантастического. Теперь вы можете перебирать массив, который у вас был ранее, и создавать объекты «вопросов», которые содержат данные каждого вопроса. Для моих целей предположим, что у вас есть NSMutableArray
с именем questionsArray
, который содержит вопросы, которые вы хотите использовать. Мы пройдемся по словарю и добавим вопросы из словаря в массив questionsArray
.
for (NSDictionary *q in questions) {
/* Create our Question object and populate it */
Question *question = [[Question alloc]init];
question.questionId = [q objectForKey:@"questionId"];
question.question = [q objectForKey:@"question"];
question.questionNumber = [q objectForKey:@"questionNumber"];
question.sectionId = [q objectForKey:@"sectionId"];
/* Add it to our question (mutable) array */
[questionsArray addObject:question];
[question release];
}
Тад! Теперь у вас есть массив, заполненный Question
объектами. В любое время, когда вы захотите просмотреть свойство любого из объектов вопроса, вы можете просто получить доступ к этому свойству. Например, чтобы получить номер первого вопроса, вы можете просто сделать это:
NSString *q1Number = [questionsArray objectAtIndex:0].questionNumber;
Обратите внимание, что все это не проверено, так как у меня нет моего компилятора. Это должно помочь вам начать. =) * * Тысяча тридцать одна
Редактировать: Вы выполняли свой запрос совершенно неправильно. Попробуйте это:
+(NSDictionary*)getQuestions:(NSString*)sectionId from: (NSString*) url{
NSDictionary *questions = nil;
NSURL *link = [NSURL URLWithString:url];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:link];
[request setPostValue:sectionId forKey:@"section"];
NSError *error = [request error];
[request startSynchronous];
if (!error) {
NSData *response = [request responseData];
NSString *json = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
questions = [json objectFromJSONString];
[json release];
} else{
//UIAlertView to warn users there was an error
}
[request release];
return questions;