我正在構建一個在應用程序包的Documents目錄中緩存圖像的應用程序。爲了確保目錄存在,我想檢查它們是否存在,如果不存在,請在應用程序啓動時創建它們。如何在檢查目錄是否存在時避免EXC_BAD_ACCESS?
目前,我這樣做是在didFinishLaunchingWithOptions:
像這樣:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSArray *directoriesToCreate = [[NSArray alloc] initWithObjects:
@"DirA/DirA1",
@"DirA/DirA2",
@"DirB/DirB2",
@"DirB/DirB2",
@"DirC",
nil];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsPath = [paths objectAtIndex:0];
for (NSString *directoryToCreate in directoriesToCreate) {
NSString *directoryPath = [documentsPath stringByAppendingPathComponent:directoryToCreate];
NSLog(directoryPath);
if (![[NSFileManager defaultManager] fileExistsAtPath:directoryPath isDirectory:YES]) {
NSError *directoryCreateError = nil;
[[NSFileManager defaultManager] createDirectoryAtPath:directoryPath
withIntermediateDirectories:YES
attributes:nil
error:&directoryCreateError];
}
}
[window addSubview:navigationController.view];
[window makeKeyAndVisible];
return YES;
}
在應用程序的第一個運行 - 當沒有目錄的存在 - 在應用程序運行,按預期的方式創建的目錄和一切運行得很好。
當應用程序終止並再次運行時,我在[NSFileManager defaultManager]
的fileExistsAtPath:
調用上得到EXC_BAD_ACCESS信號。
我不明白的是,爲什麼當這些目錄不存在時,它運行得很好,但是當它們確實存在時它會崩潰。
任何人都可以提供任何幫助嗎?
你的NSLog應該看起來像'NSLog(@「%@」,anObject);'。指定'NSLog(anObject);'在* anObject *是一個字符串時有效,因爲格式字符串應該在那個地方給出。所以,它將* anObject *作爲格式字符串。但它會崩潰它是一個其他對象,而不是一個字符串。 – EmptyStack
嘗試''保留''路徑''和'文件路徑'對象並''for'循環後釋放它們。 – jamapag