始める前に、ドキュメント ディレクトリに関するすべての投稿を確認したという事実を強調しておく必要があります。
だから私はあなたが私を助けるのを助けるために私の問題を分析しようとします.
5.1 を対象とした iOS アプリケーションを開発しています。XCode 4.4.1 と iOS シミュレーター バージョン 5.1 (272.21) を使用しています。
私の理解では、アプリがシミュレーターにインストールされると、そのディレクトリ構造は以下にマップされます
/Library/Application Support/iPhone Simulator/[IOS_VERSION]/Applications/[APP_UUID]
これは、アプリケーションを実行すると正しく反映されます。
さらに、次のコードを使用して一時ディレクトリを正常に作成して使用できます
NSString *tmpDir = NSTemporaryDirectory();
次のパスになります
/Library/Application Support/iPhone Simulator/[IOS_VERSION]/Applications/[APP_UUID]/tmp
あるはずのDocumentsディレクトリで作業したいときに問題が発生し始めます
/Library/Application Support/iPhone Simulator/[IOS_VERSION]/Applications/[APP_UUID]/Documents
次のコードは、そのパスの存在を確認し、NSLog を使用してログに記録します。パスが存在すると表示されていても、その場所に移動すると、見つからないファイルが返されます。
+ (NSString *) currentPath{
NSArray *searchPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentPath = [searchPaths objectAtIndex:0];
searchPaths=nil;
BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:documentPath];
if (fileExists == TRUE) {
NSLog(@" %@ already exists",documentPath);
} else {
NSLog(@"doesn't exists");
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;
if(![fileManager createDirectoryAtPath:documentPath withIntermediateDirectories:true attributes:nil error:&error])
{
NSLog(@"Couldn't create documents directory %@",error);
}
}
return documentPath;
}
NSLog 行の結果は次のとおりです。
2012-08-09 23:12:09.813 AMM[22656:c07] /Users/fotis/Library/Application Support/iPhone Simulator/5.1/Applications/7CE8645A-BDD7-4AB6-8CAB-B0EF1579CD2B/Documents already exists
ターミナルで
> pwd
/Users/fotis/Library/Application Support/iPhone Simulator/5.1/Applications/7CE8645A-BDD7-4AB6-8CAB-B0EF1579CD2B
>ls -lsa
total 0
0 drwxr-xr-x 5 fotis 170 Aug 9 23:12 .
0 drwxr-xr-x 3 fotis 102 Aug 9 22:50 ..
0 drwxr-xr-x 30 fotis 1020 Aug 9 23:12 AMM.app
0 drwxr-xr-x 4 fotis 136 Aug 9 22:50 Library
0 drwxr-xr-x 4 fotis 136 Aug 9 22:51 tmp
ご覧のとおり、Documentsゴースト ディレクトリはありません。私の人生では、その背後にある魔法をすべて理解することはできません. 注意すべきことの 1 つは、アプリ デリゲートの「-didFinishLaunchingWithOptions」メソッドでこれを実行していることです。これは、そこで初期化を行っているためです。
何か案は?