【问题标题】:obj-c problem setting array with componentsSeperatedByStringobj-c 问题设置数组与 componentsSeperatedByString
【发布时间】:2010-04-10 16:13:52
【问题描述】:

我有一个大约 2000 行的数据源,如下所示:

6712,Anaktuvuk Pass Airport,Anaktuvuk Pass,United States,AKP,PAKP,68.1336,-151.743,2103,-9,A

我感兴趣的是这个字符串的第 6 部分,所以我想把它变成一个数组,然后我想检查第 6 部分 [5] 是否出现了那个字符串“PAKP”

代码:

NSBundle *bundle = [NSBundle mainBundle];
    NSString *airportsPath = [bundle pathForResource:@"airports" ofType:@"dat"];
    NSData *data = [NSData dataWithContentsOfFile:airportsPath];

    NSString *dataString = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];

NSArray *dataArray = [dataString componentsSeparatedByString:@"\n"];
    NSRange locationOfAirport;
    NSString *workingString = [[NSString alloc]initWithFormat:@""];
    NSString *searchedAirport = [[NSString alloc]initWithFormat:@""];
    NSString *airportData = [[NSString alloc]initWithFormat:@""];

    int d;

    for (d=0; d < [dataArray count]; d=d+1) {
        workingString = [dataArray objectAtIndex:d];
            testTextBox = workingString; //works correctly
        NSArray *workingArray = [workingString componentsSeparatedByString:@","];
            testTextBox2 = [workingArray objectAtIndex: 0]; //correctly displays the first section "6712"
            testTextBox3 = [workingArray objectAtIndex:1] //throws exception index beyond bounds
        locationOfAirport = [[workingArray objectAtIndex:5] rangeOfString:@"PAKP"];


    }

问题是,当 workingArray 填充时,它只填充一个对象(字符串的第一个组件是“6712”。如果我让它显示 workingString,它会正确显示整个字符串,但对于某些原因,它没有正确使用逗号制作数组。

我在不使用数据文件的情况下尝试了它,它工作正常,所以问题来自我如何导入数据。

想法?

【问题讨论】:

  • 奇怪的问题。我知道这与您的问题无关,字节,您为什么要为 workingString、searchedAirport 和 airportData 分配内存?
  • 也不是问题,但 testTextBox3 行末尾缺少分号。您确定这是正在运行的确切代码吗?如果你把 NSLog(@"%@", workingArray);设置workingArray后,显示什么?
  • Pablo - 一旦我解决了这个问题,这些将用于其他用途。仙人掌- testTextBox3 只是我帖子中的一个错字。这是记录的内容:2010-04-10 11:28:34.675 Companion[16752:207] ( 6712, "Anaktuvuk Pass Airport", "Anaktuvuk Pass", "United States", AKP, PAKP, "68.1336", "- 151.743", 2103, "-9", "", A)
  • 已修复 - 大约有 5 个随机“\”导致了该问题。感谢 Pablo 引导我完成这项工作

标签: iphone objective-c arrays nsdata


【解决方案1】:

您的代码有效。您应该使用调试器运行它以查看发生了什么。猜测一下,您的输入数据并不是您认为的那样 - 可能是不同的编码或不同的行尾。

查看示例:

NSString *dataString = @"6712,Anaktuvuk Pass Airport,Anaktuvuk Pass,United States,AKP,PAKP,68.1336,-151.743,2103,-9,A";
NSArray *dataArray = [dataString componentsSeparatedByString:@"\n"];
for (NSString *workingString in dataArray) {
    NSString *testTextBox = workingString; //works correctly
NSArray *workingArray = [workingString componentsSeparatedByString:@","];
    NSString *testTextBox2 = [workingArray objectAtIndex: 0]; //correctly displays the first section "6712"
    NSString *testTextBox3 = [workingArray objectAtIndex:1]; //throws exception index beyond bounds
NSRange locationOfAirport = [[workingArray objectAtIndex:5] rangeOfString:@"PAKP"];
}

【讨论】:

  • 是的,我也试过了。我知道问题在于如何读取数据,但我不明白为什么,如果我让它显示 workingString ,它会用逗号显示字符串,但在制作数组时它看不到它们。行尾没问题,因为当我使用 [dataString componentsSeparatedByString:@"\n"];它正确地分隔了每一行,但逗号是什么把它扔掉了。与你的意思不同的编码?
  • 我只是尝试用“|”替换所有“,”并尝试了这种方式。同样的问题。无论出于何种原因,它只识别第一个组件。
【解决方案2】:

数据有问题,有几个“\”导致错误。

【讨论】:

    猜你喜欢
    • 2017-08-02
    • 1970-01-01
    • 1970-01-01
    • 2013-07-26
    • 1970-01-01
    • 2016-09-13
    • 1970-01-01
    • 1970-01-01
    • 2018-11-03
    相关资源
    最近更新 更多