创build目录时出现“没有这样的文件或目录”错误

我试图将用户生成的照片的缩略图保存在文档目录的子目录中,但是我无法首先创build子目录。 当我试图在文档目录中创build子目录时,我得到这个错误(没有这样的文件或目录):

Error Domain=NSCocoaErrorDomain Code=4 "The operation couldn't be completed. (Cocoa error 4.)" UserInfo=0x17ef9c90 {NSFilePath=/var/mobile/Applications/FD0CC480-97FE-4E50-931F-5341DB6AD92B/Documents/com.Jonathan.App-Name/707F0431-7A09-4D33-B122-13C48AD4CA53, NSUnderlyingError=0x17e51520 "The operation couldn't be completed. No such file or directory"} 

我很困惑。 我知道目录不存在,因为我试图创build它! 我唯一能想到的是文档目录是不正确的,但是从苹果文档中直接得知。

我不正确地尝试创build子目录?

 - (NSURL *)documentsDirectory { NSFileManager *sharedFM = [NSFileManager defaultManager]; NSArray *possibleURLs = [sharedFM URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask]; NSURL *appSupportDir = nil; NSURL *appDirectory = nil; if ([possibleURLs count] >= 1) { // Use the first directory (if multiple are returned) appSupportDir = [possibleURLs objectAtIndex:0]; } // If a valid app support directory exists, add the // app's bundle ID to it to specify the final directory. if (appSupportDir) { NSString *appBundleID = [[NSBundle mainBundle] bundleIdentifier]; appDirectory = [appSupportDir URLByAppendingPathComponent:appBundleID]; } return appDirectory; } - (NSURL *)thumbnailDirectoryWithName:(NSString *)theName { NSURL *directory = [[self documentsDirectory] URLByAppendingPathComponent:theName]; NSURL *thumbnailsDirectory = [directory URLByAppendingPathComponent:@"Thumbnails"]; NSError *error; if ([[NSFileManager defaultManager] fileExistsAtPath:[thumbnailsDirectory path]] == NO) { [[NSFileManager defaultManager] createDirectoryAtURL:thumbnailsDirectory withIntermediateDirectories:NO attributes:nil error:&error]; if (error) { NSLog(@"[Thumbnail Directory] %@", [error description]); return nil; } } return thumbnailsDirectory; } 

我也尝试了createDirectoryAtPath:stringByAppendingPathComponent:无济于事。

thumbnailDirectoryWithName:NSURL *directory返回:

 /var/mobile/Applications/FD0CC480-97FE-4E50-931F-5341DB6AD92B/Documents/com.Jonathan.App-Name/707F0431-7A09-4D33-B122-13C48AD4CA53 

文件path的最后一个组成部分是核心数据中实体的唯一标识符,它使我能够唯一地命名一个目录。

任何帮助是极大的赞赏!

以下是获取文档目录的方法:

 - (NSString *)documentsDirectory { NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); return (paths.count)? paths[0] : nil; } 

然后,build立你的文件的path:

 - (NSURL *)thumbnailDirectoryWithName:(NSString *)theName { NSString *namePath = [[self documentsDirectory] stringByAppendingPathComponent:theName]; NSString *thumbnailsPath = [namePath stringByAppendingPathComponent:@"Thumbnails"]; NSURL *thumbnailsURL = [NSURL fileURLWithPath:thumbnailsPath]; NSError *error; if ([[NSFileManager defaultManager] fileExistsAtPath:thumbnailsPath] == NO) { [[NSFileManager defaultManager] createDirectoryAtURL:thumbnailsURL withIntermediateDirectories:NO attributes:nil error:&error]; if (error) { NSLog(@"[Thumbnail Directory] %@", [error description]); return nil; } } return thumbnailsURL; } 

我已经接受@danh的答案,但我find了得到这个错误的原因。 这是一个简单的错误,另一个原因,当我累了,我不应该编码,哈哈。 我无法find苹果公司build议我们将应用程序包标识符作为子目录名称的原因,但是为了解决这个错误,我只需要设置withIntermediateDirectories:YES

withIntermediateDirectories:

如果是,则此方法创build任何不存在的父目录,作为在url中创build目录的一部分。 如果否,则如果任何中间父目录不存在,则此方法失败。

基本上,我试图在一个不存在的目录中创build一个子目录。