1

私はiPad用のエンタープライズ分散アプリケーションに約1年間取り組んできました。その間に5つのプロダクションビルドをリリースしましたが、問題は発生していません。ユーザーが古いバージョンの上に新しいビルドをインストールするたびに、CoreDataの移行は常に正常に機能しました。アプリケーションにビデオ録画を追加するまで。

CoreDataの外部管理データタイプに「メディア」を保存していました。これは、ユーザーが大きな動画を作成できるようになるまでは問題なく機能していました。そのため、Core Dataの移行により、5MBを超えるファイルがすべて破棄されることがわかりました。この時点で、独自のファイル管理スキームを導入しました。これは完全にうまくいきました。コアデータから独自のスキームへのファイルの独自の手動移行を作成しました。これは問題なくリリースされました。

次に、次の一連の機能を展開するときに、突然問題が発生しました。Xcodeからビルドするときに問題は発生しませんでした...しかし、Enterprise Deploymentを使用して再デプロイした後、前のビルドでファイルシステムに書き込まれたファイルが突然読み取れなくなりました。デバイスがXCodeに接続されている場合、ファイルはオーガナイザーにはっきりと表示されます。ただし、NSFileManager / NSFileHandle/NSDataはファイルを見つけることができません。彼らは常に彼らが経験したことを報告します:

error: {
    NSFilePath = "/var/mobile/Applications/3CFB07B3-D17F-45D7-A233-4E56930D794C/Documents/ep_binary_data/9465C282-7ED2-428E-B7D3-545BCFE4DFC5";
    NSUnderlyingError = "Error Domain=NSPOSIXErrorDomain Code=2 \"The operation couldn\U2019t be completed. No such file or directory\"";
}

私が言ったように、XCode Organizerを使用して、ファイルがそのパスに実際に存在することを確認できます。どんな助けでも大歓迎です。私はこれを理解しようと一日中机から頭を叩いています。

読み取りに使用されるコードは次のようになります。

NSError *err = nil;
NSData *data = [[NSData alloc] initWithContentsOfFile:self.thumbnail_url 
                                              options:NSDataReadingMappedIfSafe 
                                                error:&err];
if (err != nil) logger(@"error: %@",[err userInfo]);

そして書くために:

NSError *error = nil;
[thumbnail_ep_managed writeToFile:filePath options:NSDataWritingAtomic error:&error];
if(error != nil)
{
    NSLog(@"error writing file to path: %@\nerror: %@",filePath,[[error userInfo]description]);
}

私は困惑しています

4

1 に答える 1

0

私はSomethingAwfulでいくつかのGoonsの助けを借りて解決策を見つけました。問題は、ドキュメントディレクトリを含める場合と同様に、フルパスを保存していたことでした。これはiOSデバイスの間違いです。アップグレード後もバンドルパスが同じであることを保証することはできません。

アプリケーションをアップグレードするときに、ハッシュであるバンドル識別子(アプリがインストールされているディレクトリの名前)が変更されることがあります。したがって、フルパスを保存し、アップグレードすると、保存されたパスがブレーキされる可能性があります。解決策は、documentsディレクトリから始まる相対パスのみを永続化することです。

次に、アプリケーションを起動するときに、ドキュメントディレクトリをキャッシュし、永続的な相対パスを追加します。

だから私の元のパスから:

/var/mobile/Applications/3CFB07B3-D17F-45D7-A233-4E56930D794C/Documents/ep_binary_data/9465C282-7ED2-428E-B7D3-545BCFE4DFC5

この部分は変更される可能性があります。

3CFB07B3-D17F-45D7-A233-4E56930D794C

だから私は保存する必要があります:

ep_binary_data/9465C282-7ED2-428E-B7D3-545BCFE4DFC5

そして、以下を取得します。

/var/mobile/Applications/3CFB07B3-D17F-45D7-A233-4E56930D794C/Documents/

アプリケーション開始の一部。

出来上がり、ファイルは機能し続けます。:)

于 2013-02-18T21:22:58.013 に答える