我在Xcode 4上有一个osx应用程序。在我的程序中,我有一些地方需要读取和写入plist文件。目前我使用了/ users / my name / desktop /文件plist的文件路径。然而,当我将应用程序应用到应用程序并将其传输到另一台计算机时,它无法找到并读取文件。我应该如何制作文件路径,以便它可以在任何计算机上运行。下面是我的文件路径
filepath = @"/Users/Gautambir/Desktop/CustomerNames.plist"
答案 0 :(得分:2)
你永远不应该硬编码路径。您应该使用可用的various APIs来构建路径。
有几种方法可以构建有效路径。例如,这有效:
NSString* filePath = [[NSHomeDirectory() stringByAppendingPathComponent:@"Desktop"] stringByAppendingPathComponent:@"CustomerNames.plist"];
或者,您可以使用:
NSString* filePath = [@"~/Desktop/CustomerNames.plist" stringByExpandingTildeInPath];
虽然这些是构建路径的正确方法,但要访问特殊位置(如Desktop,Documents文件夹或Application Support文件夹),您应该使用NSSearchPathForDirectoriesInDomains()
函数,或者最好使用NSFileManager
方法URLsForDirectory:inDomains:
或URLForDirectory:inDomain:appropriateForURL:create:error:
。
这些基于URL的方法应始终优先于其基于路径的等效方法。 Apple建议所有开发人员尽快支持基于URL的方法。
这主要是因为文件URL可以存储书签数据,因此如果文件移动,仍然可以解析URL,这与路径不同,因为路径只是字符串而不能存储元数据。
以下是您使用文件管理器查找网址的方法:
NSFileManager* fm = [NSFileManager defaultManager];
NSURL* desktopURL = [fm URLForDirectory:NSDesktopDirectory
inDomain:NSUserDomainMask
appropriateForURL:nil
shouldCreate:NO
error:nil];
NSURL* fileURL = [desktopURL URLByAppendingPathComponent:@"CustomerNames.plist"];