0

JSON 解析を使用して、php を使用して MySql からデータを取得しています。必要なすべてのデータを取得しましたが、このデータを印刷したいときに for ループを作成しましたが、最後の要素のみが得られます..これは私のコードです

DidViewLoad で:

- (void)viewDidLoad
{
[super viewDidLoad];

NSString *phpUrl = @"http://dt-works.com/eman/bookOwn.php"; NSString *dbName = @"dbName"; NSString *localHost = @"localhost"; NSString *dbUser = @"dbUser"; NSString *dbPwd = @"dbPwd"; int u_id = 1; NSString *user_id = [NSString stringWithFormat:@"%d",u_id]; SBJsonParser *parser = [[SBJsonParser alloc] init]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:phpUrl]]; [request setHTTPMethod:@"POST"]; NSString *post = [[NSString alloc] initWithFormat:@"dbName=%@&localHost=%@&dbUser=%@&dbPwd=%@&user_id=%@&submit=", dbName, localHost, dbUser, dbPwd, user_id]; [request setHTTPBody:[post dataUsingEncoding:NSUTF8StringEncoding]]; NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; NSString *json_string = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding]; NSArray *statuses = [parser objectWithString:json_string error:nil]; int arraySize = [statuses count]; for (NSDictionary *status in statuses) { bo_id2 = [status objectForKey:@"bo_id"]; bo_name2 = [status objectForKey:@"bo_name"]; bo_au_id2 = [status objectForKey:@"bo_au_id"]; bo_pub_id2 = [status objectForKey:@"bo_pub_id"]; bo_num_pages2 = [status objectForKey:@"bo_num_pages"]; bo_publish_year2 = [status objectForKey:@"bo_publish_year"]; } NSLog(@"size of array is: %d", arraySize); for (int i=0; i<arraySize; i++) { NSLog(@"%d:",i); // here I want to retrieve all array elements .. when I try NSLog(@"Book id: %@ - book name: %@", bookId, bookName); // this give me the last elemet only not all data // I want to get the data here to use it later .. how ??? }

}

何か助けて??

4

4 に答える 4

1

各オブジェクトの値をインスタンス変数に再割り当てしているように見えます。インスタンス変数は、割り当てたすべてのオブジェクトではなく、1 つのオブジェクトのみを指しています。

于 2012-04-22T15:20:41.757 に答える
0

for最初のループで、タスクを完了するために2つのループを使用する必要がある理由がよくわかりません

NSMutableArray *books = [[NSMutableArray alloc] init];
for(NSDictionary *status in statuses){
  [books addObject:status];
}

後で本を取得したい場合は、 を呼び出すだけ[books objectAtIndex:index]です。うまくいけば、これが役に立ちます。依頼したすべてのタスクを完了することができるはずです。

編集 要素が 1 つだけ必要な場合は、たとえば bo_name を使用できます。

NSMutableArray *books =[[NSMutableArray alloc] init];
for(NSDictionary *status in statuses){
    [books addObject:[status objectForKey:@"bo_name"]];
}
于 2012-04-22T15:18:17.717 に答える
0
NSLog(@"Book id: %@ - book name: %@", bookId, bookName);

上記の NSLog で bookId と bookName の値を取得するにはどうすればよいですか? コードに何かが欠けています。

これを試すことができます:

for(NSDictionary *status in statuses) {
   NSLog(@"Book id: %@ - Book Name: %@", [status objectForKey:@"bo_id"], [status objectForKey: @"bo_name"]);
}

つまり、2 番目の for ループを使用する場合は、最初のループと同じ方法を使用します。

于 2012-04-22T16:01:36.750 に答える
0

おそらく、どこかで配列を再初期化しているに違いありません。コード全体で確認してください。

于 2012-04-22T15:52:49.483 に答える