objective-c - NSOpenPanel 无法使用空格从文件名正确访问 NSUrl

标签 objective-c xcode csv whitespace nsopenpanel

搜索了一下,没有发现任何问题。

我的应用程序获取 .csv 文件,切换数据并以我公司认为有用的方式输出。问题是该程序似乎需要没有空格的文件名。例如“My data.csv”将不起作用,但“My_data.csv”将起作用。这是我认为相关的代码

 NSArray *allowedTypes = [NSArray arrayWithObjects:@"CSV",@"csv",nil];
openDLG = [NSOpenPanel openPanel];
[openDLG setDelegate:self];
[openDLG setCanChooseFiles:YES];
[openDLG setAllowedFileTypes:allowedTypes];

NSInteger openReturn = [openDLG runModal];
if (openReturn == NSFileHandlingPanelOKButton) {
    NSArray *rawCSVs = [openDLG URLs];
    NSEnumerator *enumerator = [rawCSVs objectEnumerator];
    id object;
    while ((object = [enumerator nextObject])) {
        NSString *tempDump = [NSString stringWithContentsOfURL:object encoding:NSUTF8StringEncoding error:NULL];
        NSArray *bigArray = [tempDump csvRows];
        int total = [bigArray count];
        ....do other things

在 Debug模式下,对于带空格的文件名,“object”显示为 nil,对于带空格的文件名,“tempdump”字符串显示为@“nil”,但对于带下划线的 names_with_underscores 显示为 nil

最佳答案

URL 不允许所有字符,因此您需要进行一些转换。

NSString *rawString = [NSString stringWithString:@"/Users/myusername/test 1.txt"];
NSString *escapedString = [rawString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString:escapedString];
NSLog(@"url: %@", url);

关于objective-c - NSOpenPanel 无法使用空格从文件名正确访问 NSUrl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11508912/

相关文章:

objective-c - PFFacebookUtils logInInBackgroundWithReadPermissions 在 iOS9 更新后无法打开 Facebook

objective-c - UIInputView 背景在键盘动画时不可见

Xcode 和预处理器##

c++ - 如何在启用 C++11 的情况下在 xcode 4.6.2 中编译 <functional>

arrays - 如何读取 CSV 文件的 n 列以检查它们是否为空?

在 R 中多次运行一个函数

objective-c - 通过 ObjC 类别覆盖方法并调用默认实现?

iphone - 如何重新启动我的 iPhone 应用程序

java - 将 CSV 导入 Java 中的 SQLite

iphone - TableView - 信号 SIGABRT