0

したがって、私のアプリは Amazon Dynamo DB データベースにクエリを実行し、数キロバイト相当のデータを取得します。私がアプリに実行させたいのは、最初にすべてをダウンロードし、その後は毎回タイムスタンプをダウンロードして、最新バージョンのデータがあるかどうかを確認することです。たまにデータをダウンロードするだけで済むように、NSKeyedArchiver を使用して、ダウンロードしているアレイをアーカイブしようとしています。私はこの 3 つの異なる方法を試しましたが、いずれも iPhone では機能しませんが、そのうちの 2 つはシミュレーターで機能します。

[NSKeyedArchiver archiveRootObject:self.dataArray toFile:@"dataArray.archive"];

これは、シミュレーターでも実際の iPhone でも機能しません。このメソッドの結果は NO です。

次に使用したのはフルパスです。

[NSKeyedArchiver archiveRootObject:self.dataArray toFile:@"Users/Corey/Desktop/.../dataArray.archive"];

これはシミュレーターでは機能しましたが、iPhone では機能しませんでした。私の推測では、コンパイルすると、ファイルシステムが異なって見えます (そして、明らかに同じパスはありません)。次に、私は試しました:

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"dataArray" ofType:@".archive"];

[NSKeyedArchiver archiveRootObject:self.dataArray toFile:filePath];

繰り返しますが、これはシミュレーターでは機能しますが、iPhone では失敗します。アーカイブへの書き込み前にすべてのデータが self.dataArray にあることを確認し、アーカイブへの書き込み後に配列が nil であることを確認しました (iphone 版)。何が起こっているのですか?ファイルパスを行うためのより良い方法はありますか?

4

2 に答える 2

1

これは私が追跡したものです:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent: @"dataArray.archive"];
[NSKeyedArchiver archiveRootObject:your_object toFile:filePath];

シミュレーターと iPhone の両方で完璧に動作しました。

于 2014-08-15T21:13:18.763 に答える