NSFilemanager不会创建文件

时间:2011-04-11 18:59:10

标签: objective-c cocoa xcode ios4 xcode4

我有一个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;
}

1 个答案:

答案 0 :(得分:0)

我不确定为什么不创建该文件。乍一看,看起来你的代码应该可行。但我可能会忽视某些事情。它还取决于您作为storeFile:withName:atDirectory:方法的参数确切传递的内容。

尽管如此,我发布了一个答案,因为我确实在您的代码中发现了另一个错误:您release发送到filemgr,因为您还没有发送{{1}首先,你做了创建对象。在这种情况下,也不需要向其发送retain,因为您只在本地方法中使用它。您可能需要查看Apple开发人员连接文档“Cocoa Core Competencies: Memory Management”。

我不认为这个错误解释了为什么没有创建文件;虽然我很惊讶你的应用程序不会因为它而崩溃。