2

現在、Web サイトから JSON を正常に解析するアプリがあります。そのため、インターネットに接続されていないときはいつでも、アプリがクラッシュします。今、インターネットに接続していない状態でアプリがロードされたときに、以前に表示されたデータが表示されるようにしようとしています。これを行う最良の方法は何ですか?

この記事を読みましたが、JSON ファイルをアプリ バンドルに埋め込む方法がわかりません。誰かがこれを行う方法を説明できますか?

前もって感謝します!

4

3 に答える 3

1

最良の方法は次のとおりです。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"YourParsedJSON.plist"];

NSFileManager *fileManager = [NSFileManager defaultManager];

if (noInternet){
   if ([fileManager fileExistsAtPath: path]){

   // if this is true, you have a saved version of your JSON
         YourArray = [[NSMutableArray alloc] initWithContentsOfFile: path];
         // or
         YourDict = [[NSMutableArray alloc] initWithContentsOfFile: path];
   }
   else{
    // first time the app is running, and no internet, no json, inform user about this

    }

}
else{
    // make an array or dictionary ( what is your JSON )
        // response can be a NSDictionary or NSArray
        // YourArray = parsedJSON  or YourDict = parsedJSON

        [YourArray writeToFile:path atomically:YES];
        //or
        [YourDictionary writeToFile:path atomically:YES];
    }

私はそれが役立つことを願っています!

于 2013-09-10T08:16:32.847 に答える
0

編集:

私は質問を完全に理解していなかったと思います。Xmanさん、ご指摘ありがとうございます。この場合、最後にロードされた JSON ファイルをバンドルに保存し、それを使用して、サーバーにクエリを実行し、更新をバックグラウンドでロードしながら情報を表示します。

フローは次のようになります。

  1. ローカル JSON ファイルを使用してデータを解析および表示します。(JSON ファイルのローカル コピーがあると仮定します)
  2. サーバーに最新のデータを照会します。
  3. 応答を受信したら、バンドルを最新の JSON ファイルで更新します。
  4. 次に、ステップ 1 を実行します。JSON ファイルがない場合は、ステップ 2 から開始します。ネットワーク エラーがある場合は、適切な情報を表示します。

この SO の質問は、iOS でネットワーク接続を処理する方法に答えます: iOS または OSX でアクティブなインターネット接続を確認するにはどうすればよいですか?

ファイルをローカルに保存する: 解析されていない JSON データが NSString (responseString) にあると仮定して、次の手順を実行します。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory, @"latest_json.json"];

NSError *error;
[jsonString_ writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:&error];
NSLog(@"%@", error)

ファイルの読み込み

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory, @"latest_json.json"];
NSString *jsonString_ = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:&error];

前の回答

JSON ファイルを埋め込むことは、リソースをプロジェクトに埋め込むことに似ています。次のメソッドは、XML ファイルを追加してアプリでアクセスする方法を示しています。

JSON/XML ファイルを XCode ウィンドウのリソース グループ/フォルダーにドラッグ アンド ドロップします。Resouces フォルダーがない場合は、作成することをお勧めします。次に、コードでこれを行います:

NSString* filePath_ = [[NSBundle mainBundle] pathForResource:@"fileName" ofType:@"json"];
NSString *jsonString = [[NSString alloc] initWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error: NULL];

変数 jsonstring には、JSON 情報が含まれています。どのように解析するかはあなた次第です。

于 2013-09-10T08:15:42.067 に答える