データベースにクエリを実行するIOSアプリを作成しています。私は結果を順不同で取得し続けています。コメントなどのアプリの一部の機能では、結果を順番に取得することが重要です。JSONがdictを返していることは明らかですが、結果を順序付けする必要があります。サーバー側のコードは次のとおりです。
function sendResponse($status = 200, $body = '', $content_type = 'text/html') {
$status_header = 'HTTP/1.1 ' . $status . ' ' . getStatusCodeMessage($status);
header($status_header);
header('Content-type: ' . $content_type);
echo $body;
}
$result = array();
$i = 0;
$sqlGetComments = mysqli_query($link, "SELECT * FROM photo_comments WHERE photo_id='$photoID' ORDER BY post_date DESC");
while ($row = mysqli_fetch_array($sqlGetComments)) {
$result[$i] = array(
'photoID' => $row['photo_id'],
'userID' => $row['userID'],
'username' => $row['username'],
'comment' => $row['comment'],
'postedDate' => $row['post_date'],
);
$i++;
} // end while
sendResponse(200, json_encode($result));
それを解析するIOSコードがありますが、必要な方法から外れています。ですから、サーバー側でできることがあるはずです。
更新、クライアント側のコードは次のとおりです。
[request setCompletionBlock:^{
NSString *responseString = [request responseString];
[self updateComments:responseString];
}];
- (void)updateComments:(NSString *)update {
NSDictionary *root = [update JSONValue];
NSEnumerator *enumerator = [root keyEnumerator];
id key;
while (key = [enumerator nextObject]) {
NSDictionary *value = [root objectForKey:key];
_photoID = [value objectForKey:@"photoID"];
NSString *photoID = [value objectForKey:@"photoID"];
NSString *userID = [value objectForKey:@"userID"];
NSString *username = [value objectForKey:@"username"];
NSString *comment = [value objectForKey:@"comment"];
NSString *postedDate = [value objectForKey:@"postedDate"];
NSString *cellString = [NSString stringWithFormat:@"%@ \n %@ \n %@", username, comment, postedDate];
[_queryResultsMessage addObject:cellString];
}
[_tableView reloadData];
}
コメントフィールドの「Test」文字列がJSON文字列の出力方法であることに注意して、出力を次に示します。
{"1":{"photoID":"1","userID":"17","username":"kismet","comment":"Test 6","postedDate":"7 hrs ago"},"2":{"photoID":"1","userID":"17","username":"kismet","comment":"Test 5","postedDate":"8 hrs ago"},"3":{"photoID":"1","userID":"17","username":"kismet","comment":"Test 4","postedDate":"8 hrs ago"},"4":{"photoID":"1","userID":"17","username":"kismet","comment":"Test 3","postedDate":"8 hrs ago"},"5":{"photoID":"1","userID":"17","username":"kismet","comment":"Test 2","postedDate":"8 hrs ago"},"6":{"photoID":"1","userID":"17","username":"kismet","comment":"Test 1","postedDate":"8 hrs ago"}}
印刷はOKですが、NSDictionaryに割り当てられたときに混乱していると思います。誰も答えがない場合は、NSArrayに割り当てて、それをいじってみて、なんとかして解析できるかどうかを確認します。