OSX应用程序,使用NSOpenPanel获取用户选择的文件数据

时间:2016-03-08 17:13:46

标签: objective-c macos cocoa

我是开发OSX应用程序的新手。我通常会做iOS应用程序,因此很多概念都会延续下去。但是,我似乎无法弄清楚为什么我无法检索系统中文件的数据。

为了读取用户系统上的文件,是否需要先做一些事情?

这就是我所拥有的:

- (IBAction)btnBrowse:(id)sender {
    NSOpenPanel *panel = [NSOpenPanel openPanel];

    [panel beginWithCompletionHandler:^(NSInteger result){

        if (result == NSFileHandlingPanelOKButton) {
            //Get the file url user selected
            NSURL *file = [[panel URLs] objectAtIndex:0];

            //Get the file data
            NSError *error;
            NSString *fileData = [NSString stringWithContentsOfFile:[NSString stringWithFormat:@"%@", file] encoding:NSUTF8StringEncoding error:&error];

            //This returns null
            NSLog(@"%@", fileData);

            //This says that the file does not exist
            NSLog(@"Error: %@", error.localizedDescription);
        }
    }];
}

2 个答案:

答案 0 :(得分:4)

NSOpenPanel返回NSURL个对象,最简单的解决方案是使用NSURL相关API

NSString *fileData = [NSString stringWithContentsOfURL:file encoding:NSUTF8StringEncoding error:&error];

如果您不知道文本编码,则可以使用此API,如果读取成功,encoding包含使用的编码。

NSStringEncoding encoding;    
NSString *fileData = [NSString stringWithContentsOfURL:file usedEncoding:&encoding error:&error];

答案 1 :(得分:0)

使用-[NSURL path]方法代替调用' file'直接,因为它是NSURL,而不是NSString。