abi*_*one 11 cocoa-touch exc-bad-access objective-c nsfilemanager ios
我正在构建一个应用程序,它将图像缓存在应用程序包的Documents目录中.为了确保目录存在,我想检查它们是否存在,如果不存在,则在应用程序启动时创建它们.
目前,我这样做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;
}
Run Code Online (Sandbox Code Playgroud)
在应用程序的第一次运行时 - 当没有任何目录存在时 - 应用程序运行,目录按预期创建,一切运行正常.
当应用程序终止并再次运行时,我会在fileExistsAtPath:通话时收到EXC_BAD_ACCESS信号[NSFileManager defaultManager].
我不明白的是为什么当目录不存在时它运行得很好,但是当它们确实存在时它就会失败.
有人可以提供任何帮助吗?
Eim*_*tas 41
你以错误的方式使用检查功能.第二个参数必须是一个指向布尔变量的指针,该函数在调用函数后将被填充:
你正在使用这样的功能:
[[NSFileManager defaultManager] fileExistsAtPath:directoryPath isDirectory:YES];
Run Code Online (Sandbox Code Playgroud)
但功能应该像这样使用:
BOOL isDir;
[[NSFileManager defaultManager] fileExistsAtPath:directoryPath isDirectory:&isDir];
if (isDir) { // file exists and it is directory.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3032 次 |
| 最近记录: |