0

我正在使用 JSON 解析通过使用 php 从 MySql 获取数据我得到了我想要的所有数据,但是当我想打印这些数据时,我创建了一个 for 循环,但它只给了我最后一个元素..这是我的代码

在 DidViewLoad 中:

- (void)viewDidLoad
{
[超级视图DidLoad];

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

您似乎只是将每个对象的值重新分配给一个实例变量,一个实例变量只指向一个对象,而不是您分配给它的所有对象。

于 2012-04-22T15:20:41.757 回答
0

很可能您一定在某个地方重新初始化了数组。检查整个代码。

于 2012-04-22T15:52:49.483 回答
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"]);
}

换句话说,如果您想使用第二个 for 循环,请使用与第一个相同的方式。

于 2012-04-22T16:01:36.750 回答
0

我不太明白为什么for在第一个循环中必须使用两个循环来完成任务

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

稍后当您想要检索任何书籍时,您只需调用[books objectAtIndex:index]. 希望这可以提供帮助。您应该能够完成您要求的所有任务。

编辑 如果您只想要一个元素,例如 bo_name 您可以使用:

NSMutableArray *books =[[NSMutableArray alloc] init];
for(NSDictionary *status in statuses){
    [books addObject:[status objectForKey:@"bo_name"]];
}
于 2012-04-22T15:18:17.717 回答