【问题标题】:NSFileManager works when built in Xcode as release, but not when ran as standalone OS X Cocoa appNSFileManager 在 Xcode 中作为发行版构建时有效,但在作为独立 OS X Cocoa 应用程序运行时无效
【发布时间】:2011-06-16 17:25:41
【问题描述】:

我编写了以下函数来从目录中随机选择一个文件。当我在 Xcode 中构建项目以使用自动打开的应用程序发布时,它工作得很好。但是,如果我从 finder 打开应用程序,按下触发此功能的按钮将导致我的程序冻结然后崩溃。我唯一能想到的是将参数更改为 contentsOfDirectoryAtPath: 以不具有 ./,但任何一个版本都有相同的确切问题。

查看控制台告诉我,我的程序异常退出并出现浮点异常,但我不知道是什么原因造成的。有什么我没有看到的东西跳出来给你们吗?大约一周前我才开始学习/使用 Objective-C 和可可,所以这对我来说都是全新的。

感谢您查看此...

- (NSMutableString*)setFilePathRandom{
NSArray* files;
NSFileManager* fileManager;
fileManager = [[NSFileManager alloc] init];
files = [fileManager contentsOfDirectoryAtPath:@"./Random Trippy Pics" error:NULL];
NSString* directoryPath = (NSMutableString*)[fileManager currentDirectoryPath];
NSString* fileName;
do{
    fileName = [files objectAtIndex:(arc4random()%[files count])];
}while([fileName isEqualToString:@".DS_Store"]);
filePath = [NSString stringWithFormat:@"%@/Random Trippy Pics/%@",directoryPath,fileName];
[fileManager release];
return filePath;
}

【问题讨论】:

    标签: objective-c cocoa nsfilemanager


    【解决方案1】:

    当从 Xcode 运行 OS X 应用程序时,其当前目录是构建文件夹的路径。当“正常”运行时,当前目录为/。因此,您的程序正在寻找/Random Trippy Pics 的目录,该目录几乎可以肯定不存在。那个目录一般在哪里?


    编辑:

    你可以用这段代码得到应用程序当前存储的目录:

    NSString *currentStoragePath = [[[NSBundle mainBundle] bundlePath] stringByDeletingLastPathComponent];
    

    但是,如果应用程序需要Random Trippy Pics 目录,则应将其存储在已知位置——最好是应用程序的Resource 目录。然后您可以通过以下方式获取内容:

    NSArray *files = [[NSBundle mainBundle] pathsForResourceOfType:nil inDirectory:@"Random Trippy Pics"];
    

    【讨论】:

    • 哦,好吧。非常感谢您帮我解决这个问题!也就是说,是否有任何功能可以为我提供应用程序所在的文件夹?我基本上有我的应用程序和一个名为“Random Trippy Pics”的文件夹,位于该应用程序所在的同一目录中。
    • 甜蜜。非常感谢米帕迪!我想这是我学习如何使用 Cocoa 捆绑包的时间点。我必须在某个时候学习它,现在是最好的时机。到 Apple 开发者中心!我认为他们会在那里提供各种教程/指南。
    • @thisissami:资源编程指南是一个好的开始:developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多