我有一个NSFileManager的问题,因为我只能将文件存储到应用程序文档目录中,但我想在子目录中创建一个文件,我不知道为什么,我无法创建。我的代码如下:
+(NSString *)applicationDocumentsDirectory {
return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
}
+(BOOL)storeFile:(NSData*)file withName:(NSString*)name atDirectory:(NSString*)dir{
NSFileManager *filemgr;
NSString *docsDir;
NSString *newDir;
BOOL create=NO;
filemgr =[NSFileManager defaultManager];
docsDir = [StorageManager applicationDocumentsDirectory];
newDir = [docsDir stringByAppendingPathComponent:dir];
if(![filemgr fileExistsAtPath:newDir]){
if([filemgr createDirectoryAtPath:newDir withIntermediateDirectories:NO attributes:nil error:nil]){
create=YES;
}
}else
create=YES;
if(create){
if(![filemgr createFileAtPath:newDir contents:file attributes:nil]){
[filemgr release];
return YES;
}
}
[filemgr release];
return NO;
}
答案 0 :(得分:0)
我不确定为什么不创建该文件。乍一看,看起来你的代码应该可行。但我可能会忽视某些事情。它还取决于您作为storeFile:withName:atDirectory:
方法的参数确切传递的内容。
尽管如此,我发布了一个答案,因为我确实在您的代码中发现了另一个错误:您不将release
发送到filemgr
,因为您还没有发送{{1}首先,你做了不创建对象。在这种情况下,也不需要向其发送retain
,因为您只在本地方法中使用它。您可能需要查看Apple开发人员连接文档“Cocoa Core Competencies: Memory Management”。
我不认为这个错误解释了为什么没有创建文件;虽然我很惊讶你的应用程序不会因为它而崩溃。