1

単一のphpファイルから複数の配列をiOSアプリに返す方法があるかどうか疑問に思っていました.

私は1つの配列でそれを行うことができましたが、別の配列を追加するとnullになっているようです:(ここで同じ方法を使用して短くしますが、実際には別のテーブルから結果を取得しています)

PHP:

function getArray() 
{
    $query = "query here";

    if ($result = $this->db->query($query)) 
    {
        $resultArray = array();

        while($row = mysqli_fetch_assoc($result))
        {
          $resultArray[] = $row;
        }

        echo json_encode($resultArray);
        $result->free();
    }
}

getArray();
getArray();

ブラウザでphpファイルを開くと、次のように表示されます。

[{"id":"1","name":"John"},{"id":"2","name":"Susan"}]
[{"id":"1","name":"John"},{"id":"2","name":"Susan"}]

Xcode:

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSURL *url = [NSURL URLWithString:@"urlhere"];
    NSData *data = [NSData dataWithContentsOfURL:url];
    NSArray *resultsArray = (NSArray *)[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
    NSLog(@"%@",resultsArray);
}

ただし、resultsArray は (null) を返すようです。配列を2回ではなく1回エコーすると、うまくいくようです。両方の配列を Xcode に取り込んで、NSJSONSerialization を使用する方法はありますか? ありがとう!

4

1 に答える 1

2

json_encode小さな配列を JSON 文字列にしてから、それらを別の配列に入れる必要があります。すべての小さな配列を大きな配列に挿入したら、json_encodeそれを xcode に返す必要があります。

Xcode で、パーサー フレームワーク/プラグインを使用するgithubgoogle、他のユーザーが実行して、php から取得した NSData を解析してみてください。データの解析方法に応じて、NSArray/NSDictionary になるはずです。


これは、配列を解析する方法のサンプルです。状況によっては、それらを 2 回解析する必要がある場合があります。結果を NSLog して、解析後に何が得られるかを確認してください。

psこれはNSDataをNSDictionaryに解析します。状況に応じて必要な場合は、NSArrayを返すように自分自身を変更してみてください。

- (NSDictionary *)parseJsonDataToNSDictionary:(NSData *)POSTReply
{
NSDictionary * jsonArray = [[NSDictionary alloc] init];
// Check iOS version
NSString *version = [[UIDevice currentDevice] systemVersion];
BOOL isAtLeast5 = [version floatValue] >= 5.0;
if(isAtLeast5) {
    NSError *e = nil;
    jsonArray = [NSJSONSerialization JSONObjectWithData:POSTReply options:NSJSONReadingMutableContainers error:&e];
    if (!jsonArray) {
        NSLog(@"Error parsing JSON: %@", e); //return false;
    } else { /* sucess parsing */ }
} else {
    // support for device which not iOS 5
    NSString *json_string = [[NSString alloc] initWithData:POSTReply encoding:NSUTF8StringEncoding];
    SBJsonParser *parser = [[SBJsonParser alloc] init];
    jsonArray = [parser objectWithString:json_string];
}
return jsonArray;
}
于 2013-08-02T07:52:01.630 に答える