【问题标题】:NSOpenPanel not correctly accessing NSUrl from filename with WhitespaceNSOpenPanel 没有从文件名中正确访问 NSUrl,带有空格
【发布时间】:2012-07-16 16:53:36
【问题描述】:

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

我的应用程序采用 .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

在调试模式下,“object”对于带有空格的文件名显示为 nil,而“tempdump”字符串对于带有空格的文件名显示为 @"nil",但对于 names_with_underscores 则非常好

【问题讨论】:

    标签: objective-c xcode csv whitespace nsopenpanel


    【解决方案1】:

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

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

    【讨论】:

    • 我想我在看到这个之前就想出了这个或解决方法 - 无论如何感谢您提供正确的信息。
    猜你喜欢
    • 2011-07-18
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多