0

以下を使用して、viewDidLoad でバンドル オブジェクトを初期化しています。

documentBundle = [[NSBundle alloc] initWithPath:path];

パスは次のようになります。

/Users/..../Library/Application Support/iPhone Simulator/6.1/Applications/B69B8A03-C029-4DF5-89E0-1429E73E840F/Documents/Downloads/documents.bundle

アプリケーションの実行中に、documents.bundle を更新して古いものを取り除く必要があります。だから私はそれを削除し、ウェブから最新のものをダウンロードします。バンドル オブジェクトが同じフォルダーを指していることを確認しましたが、既存のフォルダーを置き換えた後、そのバンドル内のコンテンツを取得できません。アプリケーションを再起動すると、最新のコンテンツが取得されます! ここで何が起こっているのかわかりません。何が間違っているのか指摘できますか?

バンドルを交換した後、以下はNilパスを返します! 端末から必要なファイルがすぐそこにあることがわかります!

NSString *path = [documentBundle pathForResource:filename ofType:extension];

また、バンドルを置き換えた後にバンドル オブジェクトを再初期化しようとしましたが、それでも同じメモリ アドレス (%p を使用して出力) を指しており、新しいバンドルからコンテンツを返しません。

デバイスとシミュレータの両方で同じ結果が得られます。

4

1 に答える 1

0

オブジェクトのインスタンス化中にNSBundleがファイルシステムを記憶しているようです。その後、そのフォルダに追加された新しいファイルは認識されません! フォルダーを削除して同じ名前で新しいフォルダーを再作成しても、それは認識されません。常に Documents ディレクトリを指す NSBundle を試し、 [pathForResource:filename ofType:extension inDirectory:directory] ​​を使用しましたが、ディレクトリを置き換えても機能しません。要するに、ファイルシステムが同じ名前を使用して動的である場合は、決して NSBundle を扱わないでください!

新しいダウンロードごとに現在のタイムスタンプフォルダーを作成し、古いフォルダーを削除してからNSBundleオブジェクトをリセットすることで解決策を見つけました。実際には存在しなかったため、機能し、正しいパスを作成するようになりました! 詳細については、NSBundleの Apple ドキュメントを参照してください。

于 2013-08-01T13:11:28.143 に答える