0

我正在使用委托功能-(BOOL)application:(NSApplication *)theApplication openFile:(NSString *)fileName;通过双击以前从应用程序本身保存的文件来启动我的应用程序。

我遇到的主要问题是文件的路径。fileName如果我在变量中双击桌面上的文件,则会得到以下路径:

/Users/Mark/Library/Containers/com.Mark.myApp/Data/Desktop/theFile.ff

虽然我期待类似的东西

/Users/Mark/Desktop/theFile.ff

这就是我使用NSOpenPanel

我该如何管理这条路径?

编辑 - - -

当我尝试使用取消归档文件的内容时

[NSKeyedUnarchiver unarchiveObjectWithData:[NSData dataWithContentsOfURL: filename]];

我得到错误-[NSKeyedUnarchiver initForReadingWithData:]: data is NULL

但是当我使用 NSOpenPanel 读取相同的文件时,它可以正常工作。

编辑添加源------------

这本质上是我用来通过双击文件来管理应用程序启动的代码。

-(BOOL)application:(NSApplication *)theApplication openFile:(NSString *)fileName{
    self.openFile = [NSURL URLWithString:fileName];
}

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    if (self.openedFile != nil) { 
        id obj = [NSKeyedUnarchiver unarchiveObjectWithData:[NSData dataWithContentsOfURL:filename]];
        - do something with the obj -
    }

}
4

1 回答 1

1

有什么问题?它们都指向同一个文件。第一个只是沙盒表示(使用符号链接,因此应用程序可以访问桌面而不会破坏沙盒)

编辑:在你的代码中你使用 URLWithString 实际上你应该使用 fileURLWithPath。
字符串不是 URL,而是使用 fileURLWithPath 转换为 URL 的 POSIX 路径

于 2012-11-30T15:28:07.200 回答