現在、Web サイトから JSON を正常に解析するアプリがあります。そのため、インターネットに接続されていないときはいつでも、アプリがクラッシュします。今、インターネットに接続していない状態でアプリがロードされたときに、以前に表示されたデータが表示されるようにしようとしています。これを行う最良の方法は何ですか?
この記事を読みましたが、JSON ファイルをアプリ バンドルに埋め込む方法がわかりません。誰かがこれを行う方法を説明できますか?
前もって感謝します!
最良の方法は次のとおりです。
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];
}
私はそれが役立つことを願っています!
編集:
私は質問を完全に理解していなかったと思います。Xmanさん、ご指摘ありがとうございます。この場合、最後にロードされた JSON ファイルをバンドルに保存し、それを使用して、サーバーにクエリを実行し、更新をバックグラウンドでロードしながら情報を表示します。
フローは次のようになります。
この 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 情報が含まれています。どのように解析するかはあなた次第です。