私は、一連の質問とそのオプションと答えがjson構文解析によって取得されるアプリケーションを作成するコードを作成しています。私はviewDidLoadメソッドでこれをすべてやっています。json出力のクラスインスタンスに値を代入する
これまでのコードです。解析コードが正常に動作しています。 NSLog(@"%@", jsonData[@"data"]);
コードの出力がコンソールでどのように見えるか
- (void)viewDidLoad {
[super viewDidLoad];
question *quest = [[question alloc] init];
//Parsing code
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:@"http://***/****/fetch.php"]];
[request setHTTPMethod:@"POST"];
NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
[[session dataTaskWithRequest:request completionHandler:^(NSData *data , NSURLResponse *response , NSError *error){
NSError *err = nil;
id jsonData = [NSJSONSerialization JSONObjectWithData:data options:0 error:&err];
if (err) {
[self alertMessage:(@"%@", err)];
}
else {
//Unclear from here
NSLog(@"%@", jsonData[@"data"]);
allData = jsonData[@"data"];
NSLog(@"%lu",(unsigned long)allData.count);
int count = allData.count;
int i = 0;
while (i < count){
question *que;
NSString *q,*a,*o1,*o2,*o3,*o4;
a = [allData valueForKey:@"answer"];
q = [allData valueForKey:@"question"];
o1 = [allData valueForKey:@"option1"];
o2 = [allData valueForKey:@"option2"];
o3 = [allData valueForKey:@"option3"];
o4 = [allData valueForKey:@"option4"];
//NSLog(@"%@", [allData valueForKey:@"question"]);
[que setValue:q forKey:@"question"];
[que setValue:a forKey:@"answer"];
[que setValue:o1 forKey:@"option1"];
[que setValue:o2 forKey:@"option2"];
[que setValue:o3 forKey:@"option3"];
[que setValue:o4 forKey:@"option4"];
i++;
NSLog(@"%@",[que valueForKey:@"question"]);
}
}
}] resume];
}
がここにあります。
{
answer = sometext;
id = 7;
option1 = sometext;
option2 = sometext;
option3 = sometext;
option4 = sometext;
question = "sometext";
},
{
answer = sometext;
id = 9;
option1 = sometext;
option2 = sometext;
option3 = sometext;
option4 = sometext;
question = "sometext";
}
)
は、私の知る限り理解し、このJSONデータ辞書(?)
私がやっている次のステップは、私が作成しているされた「質問」クラスの配列です。私がしようとしているque
と呼ばれるquestion
クラスの午前インスタンスを作成しようとしていviewDidLoad
方法でwhileループで
#import "question.h"
@implementation question {
NSString *q;
NSString *a;
NSString *o1;
NSString *o2;
NSString *o3;
NSString *o4;
}
@end
:私はそれが正しいが、ここでそのためのコードだしなかった場合、私はわかりませんコードに示すように入力します。 しかし、NSLog(@"%@",[que valueForKey:@"question"]);
という行は、コンソールにnull
と表示されます。
私が使用している方法に何か問題があると確信しています。
第2の問題は、viewDidLoad
の直後に宣言するquest
と呼ばれるquestion
という配列を作成していることです。しかし、私はボタンのクリックイベントのような他のコードブロックでそれを使用することはできません。
initialiser element is not a compile-time constant
は、私は、これはコードの理想的な方法ではないことを知っているが、私はここにまだ初心者だと、これらすべてを持つだけで混乱しています:私はviewDidLoad
上question *quest = [[question alloc] init];
ラインを使用しようとする場合には、エラーが発生します新しい概念。私はSwiftで同じアプリを開発しましたが、Objective Cはあまりにも難しいと感じています。 ご協力いただければ幸いです。
ありがとうございました!これはうまくいった。今私は間違っていることを知っている!助けてくれてありがとう! –