iphone - NSFileManager 和 NSDirectoryEnumerator 崩溃?

标签 iphone ios nsfilemanager

下面的代码在 walker = [fileManager enumeratorAtPath:directory]; 处崩溃。代码在第一次调用 refresh 时执行正常,但在第二次(和后续)调用时崩溃。

关于我可能做错了什么有什么想法吗?

- (void)refresh
{
    NSString* directory = nil;
    NSFileManager* fileManager = nil;
    NSDirectoryEnumerator* walker = nil;

    if(files == nil)
        files = [[NSMutableArray alloc] init];
    else
        [files removeAllObjects];

    ASSERT(files != nil);
    if(files == nil) goto EARLY_EXIT;

    fileManager = [[NSFileManager alloc] init];
    ASSERT(fileManager != nil);
    if(fileManager == nil) goto EARLY_EXIT;

    directory = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
    ASSERT(directory != nil);
    if(directory == nil) goto EARLY_EXIT;

    ASSERT(directory != nil);
    walker = [fileManager enumeratorAtPath:directory];
    ASSERT(walker != nil);
    if(walker == nil) goto EARLY_EXIT;

    NSString* file;
    while((file = [walker nextObject]) != nil)
    {       
        BOOL isDirectory = YES;
        if([fileManager fileExistsAtPath:file isDirectory:&isDirectory] && !isDirectory)
            [files addObject:file];
    }

EARLY_EXIT:

    //if(walker != nil)
    //  [walker release];

    if(fileManager != nil)
        [fileManager release];

    //if(directory != nil)
    //  [directory release];
}

最佳答案

事实证明,在 iOS 和 10.5 及更高版本中,您不应使用 [NSFileManager defaultManager]了。使用 Cocoa 将近 15 年让我对这个很感兴趣。我会将其留作对其他人的警告 -- TechZen

尽管您在这段代码中犯下了许多违反良好编程习惯的错误,但您真正的问题在于:

fileManager = [[NSFileManager alloc] init];

NSFileManger 在每个应用程序中都是一个单例。你永远不会自己初始化它。正确获取单例的方法是:

fileManager=[NSFileManager defaultManager];

... 返回单例。但是,您通常不会理会属性或变量,而只是这样使用它:

walker = [[NSFileManager defaultManager] enumeratorAtPath:directory];

<罢工> 您知道不应该在发布代码中使用断言,对吧?

关于iphone - NSFileManager 和 NSDirectoryEnumerator 崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5252354/

相关文章:

ios - 旋转 View Controller

ios - 如何使用 FileManager 检索嵌套文件?

iphone - 如何将文件保存到文档文件夹中?

ios - 使用 itms-services URL 的 iOS8 应用程序无线 (OTA) 安装失败

ios - 如何获取我存储在文档目录中的音频列表

ios - 如何折叠 iPhone 上的键盘?

iphone - TabBarController + NavigationController :Push and Pop issue

iphone - 存储省份、城市并与 plist 协调

ios - 为什么 CIImage 的属性方法返回 nil

ios - Sprite Kit 中的增量分数显示在 HUD 中