0

アプリをウェブに接続するのはこれが初めてです。これがどのように機能するかを明確にしたいだけです。オンラインでホストされているmysql dbからデータをダウンロードしたいのですが、ホストにはphpが添付されているようです(hostgator)。

手順は次のとおりです。 1. php (サーバー モジュール上) で、付属の PHP モジュールを使用して mysql 情報を JSON に転写するメソッドを設定します。配列を返します(jsonは多層辞書配列オブジェクトだと思います)

  1. xcode では、Apple の json フレームワークを使用して URL リクエストを作成し、データを json オブジェクト (または配列または辞書?) にダウンロードします。

  2. データを調べてオブジェクトを作成し、coredata に保存します。

ロジックを正しくフォローしているかどうかを教えてください。

また、JSON は 1 つのオブジェクトまたは mysql db のすべてのオブジェクトを返しますか。コアデータに 10,000 個のオブジェクトを入力する必要がある場合、10,000 件のリクエストまたは 1 件のリクエストを作成し、10,000 件のオブジェクトに相当する情報を解析する必要がありますか?

また、これは私がする必要があることを行うための最良の方法ですか? http リクエストについて聞いたことがありますが、複雑に思えて、それが何なのかわかりません。

このような初心者の質問で申し訳ありません。

助けてくれてありがとう。

4

2 に答える 2

3

それを行うには多くの方法があり、いくつかは他の方法よりも「より正しい」ものです:-)しかし、あなたは正しい道を進んでいます。同様の状況で私が何をするかを説明します。

1- PHP エンジンの場合、データにアクセスするための API を作成する必要があります。どのデータ?テストのためにできる最も簡単でおそらく最初のこと (テスト目的のみ!!!!) は、ios APP から POST 経由でクエリを受け取り、エンコードされた JSON 文字列で応答するページを作成することです。JSON を使用すると、オブジェクトの階層全体 (変数、配列、辞書など) を転送できます。オブジェクトをどのようにリンクするかは、ユーザー次第です。エンコードするデータがテーブルの場合は、次のようにできます。

// first connect to the database and execute the query, then...

$data = array();
while(!$RS->EOF){
for ($i = 0; $i < $cols; $i++){
    $rowName = utf8_encode($RS->Fields[$i]->name);
    $rowValue = utf8_encode($RS->Fields[$i]->value);
    $rowData[$rowName] = $rowValue;
}

array_push($data, $rowData);
$RS->MoveNext();
}

$response['data'] = $data;
echo json_encode($response);

結果は、「data」という名前のキーを持つ最初の辞書を持つ JSON オブジェクトです。「data」キー内には、辞書の配列があります。各ディクショナリには、キーの列名とデータの列値があります。

data =     (
            {
        attivita = "this is the first row in the table";
        id = 2548;
        },
            {
        attivita = "this is the second row in the table";
        id = 2547;
        };
}

json_encode を使用するだけで、json 文字列を作成できます。

iPhone 側では、AFNetworking をダウンロードして使用することをお勧めします。これは非常に優れた完全なオープン ソース フレームワークであり、http/https リクエスト、XML、JSON などの多くの組み込みオブジェクトとメソッドを備えています。AFNetworking を使用すると、同様の方法でリクエストを行うことができます。

AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:@"http://url.for.the.php.page"];
NSMutableURLRequest *request = [httpClient requestWithMethod:@"POST" path:mainPath parameters:params];


AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {

    // your success code here

    // remember, the first object is a dictionary with a key called data
    NSArray *arrayOfData = [JSON objectForKey:@"data"];

    NSMutableArray *arrayOfActivities = [NSMutableArray array];

    for (NSDictionary *objectDictionary in arrayOfData) {
        // objectDictionary is your dictionary containing 
        // a key with the column name and a value with the column content
        // here you can init your custom objects

    }


} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
    // your failure code here
}];

[operation start];

ご覧のとおり、JSONRequestOperationWithRequest: メソッドには、デコードされた JSON を返す完了ハンドラーがあるため、objectForKey または objectAtIndex を使用して辞書/配列に直接アクセスできます ;-)

最後の提案: 本番環境および安全な環境では、投稿リクエストでクエリを送信しないようにする必要があります。ここに貼り付けたコードは、プライベート アプリケーション用です (テスト目的でのみ使用されます)。リクエストの種類ごとに異なる API を使用し、安全な認証方法を使用することをお勧めします (oAuth を参照)。Instagram または Twitter API (Instagram の方が簡単です) を調べて、使用することをお勧めします。独自の API を作成する方法についていくつかのアイデアを提供します。

幸運を

于 2013-01-03T21:05:07.247 に答える
2

JSON 化された MySQL データを返すメソッドを作成する最初のステップは正しいです。ただし、正確に何が返されるかは、完全にあなた次第です。JSON は非常に柔軟な形式であり、ほぼすべての形式のデータを応答に入れることができます。何をしたいかによっては、PHP モジュールに異なるものを返すいくつかのメソッドを用意することが理にかなっている場合があります。たとえば、本のデータベースがある場合、著者を指定できるメソッドを作成し、その著者によって書かれたデータベース内のすべての本を含む JSON 応答を返すことができます。

HttpRequest を使用して実際にモジュールの呼び出しを実行することもできますが、Obj-CNSURLRequestは非常に使いやすいことがわかりました。

NSURLRequest *request = [NSURLRequest requestWithURL:
                        [NSURL URLWithString:@"http://yoururl/books/38917"]];
[[NSURLConnection alloc] initWithRequest:request delegate:self];

JSON 応答を独自の Objective-C オブジェクトに手動で解析する必要があるとは思わないでください。これは非常に一般的なタスクであり、そのための優れたライブラリが多数存在します。SBJSON フレームワークに関するこのチュートリアルをチェックして、最も一般的なソリューションの 1 つを確認してください。

NSDictionary例として、簡単に走査できるように JSON 応答を に解析する方法を次に示します。

// Create SBJSON object to parse JSON
SBJSON *parser = [[SBJSON alloc] init];

// parse the JSON string into an object - assuming json_string is a NSString of JSON data
NSDictionary *object = [parser objectWithString:json_string error:nil];
于 2013-01-03T20:51:08.503 に答える