私のアプリのdidFinishLaunchingWithOptions
でファイルを取得してアプリケーションディレクトリに保存する機能を現在使用しています。リモートファイルを取得するときに接続が遅いためにアプリがクラッシュしないようにする
弱い接続があると、アプリがクラッシュすることがあります。私は、アプリケーションをクラッシュさせる前にAppleが許す20秒の時間制限があることを読んだ。これは正しいです?もしそうなら、非常に弱い接続をしていることを除いて、アプリケーションが完璧に動作するので、これは私の問題を引き起こしていると私は信じています。
どうすればこの問題を解決し、これを補うためにロジックを変更できますか?
- (void)writeJsonToFile
{
//applications Documents dirctory path
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
//live json data url
NSString *stringURL = @"http://link-to-my-data.json";
NSURL *url = [NSURL URLWithString:stringURL];
NSData *urlData = [NSData dataWithContentsOfURL:url];
//attempt to download live data
if (urlData)
{
NSString *filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory,@"data.json"];
[urlData writeToFile:filePath atomically:YES];
}
//copy data from initial package into the applications Documents folder
else
{
//file to write to
NSString *filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory,@"data.json"];
//file to copy from
NSString *json = [ [NSBundle mainBundle] pathForResource:@"data" ofType:@"json" inDirectory:@"html/data" ];
NSData *jsonData = [NSData dataWithContentsOfFile:json options:kNilOptions error:nil];
//write file to device
[jsonData writeToFile:filePath atomically:YES];
}
}
私のスレッドの使用の欠陥を指摘してくれてありがとう。これは私の最初のアプリですので、私はまだスレッドとメモリ管理のコンセプトに合わせて調整しています。このメソッドの現在の実装を再考した後、私は、アプリケーションが起動した後、バックグラウンドでデータを更新するつもりです。あなたの答えは@SVGregと似ていましたが、最初に提案をして答えが得られました。 –