NSString进入NSArray

时间:2011-06-09 13:23:17

标签: iphone xcode nsstring nsarray

我目前正在接收文件并将其存储到NSString中。然后我从字符串中创建一个数组并在TableView中显示它。这在一定程度上起作用。我目前正在接收这样的数据:

CompanyName | AccountCode \ r \ nCompanyName | AccountCode \ r \ nCompanyName | AccountCode \ r \ n等等......

我正在做的那一刻:

NSString *dataString = [NSString stringWithContentsOfURL:url encoding:nil error:nil];
myArray = [dataString componentsSeparatedByString:@"\r\n"];

将数据显示为:

公司名称| AccountCode 公司名称| AccountCode 公司名称| AccountCode

我的问题是:我可以将“dataString”拆分为二维数组吗?或者我应该创建2个数组(一个使用CompanyName,一个使用AccountCode)。我该怎么做?

由于

编辑:

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";  

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
    }

    // Configure the cell.
    if (testArray.count >indexPath.row) {

        cell.textLabel.text = [testArray2 objectAtIndex:0];
        cell.detailTextLabel.text = [testArray2 objectAtIndex:1];

    }

    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

    return cell;
}

编辑:

出于测试目的,我的代码是:

- (void)viewDidLoad {
    [super viewDidLoad];

    testArray = [[NSArray alloc] init];
    NSString *testString = @"Sam|26,Hannah|22,Adam|30,Carlie|32";
    testArray = [testString componentsSeparatedByString:@","];

    dict = [NSMutableDictionary dictionary];
    for (NSString *s in testArray) {

        testArray2 = [s componentsSeparatedByString:@"|"];
        [dict setObject:[testArray2 objectAtIndex:1] forKey:[testArray2 objectAtIndex:0]];
    }

    NSLog(@"Dictionary: %@", [dict description]);
    NSLog(@"Account code for CompanyName1: %@", [dict objectForKey:@"CompanyName1"]);
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";  

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
    }

    // Configure the cell.
    if (testArray.count >indexPath.row) {

        cell.textLabel.text = [testArray2 objectAtIndex:0];
        cell.detailTextLabel.text = [testArray2 objectAtIndex:1];

    }

    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

    return cell;
}

2 个答案:

答案 0 :(得分:6)

Marzapower是正确的,您可能希望使用NSDictionary或NSMutableDictionary来存储键值对。在上面代码的正下方,您可以使用以下代码:

NSMutableDictionary *dict = [NSMutableDictionary dictionary];
for (NSString *s in myArray)
{
    NSArray *arr = [s componentsSeparatedByString:@"|"];
    [dict setObject:[arr objectAtIndex:1] forKey:[arr objectAtIndex:0]];
}
NSLog(@"Dictionary: %@", [dict description]);
NSLog(@"Account code for CompanyName1: %@", [dict objectForKey:@"CompanyName1"]);

日志记录代码显示生成的字典以及如何根据公司名称提取对象。请记住,此处没有错误检查,如果其中一个数组组件中没有管道符,则setObject行将会爆炸。

当然,如果您想将帐户代码作为密钥,只需在setObject行中翻转1和0.

编辑:在cellForRowAtIndexPath中,您应该访问dict字典而不是testArray2数组。例如,您可能希望执行以下操作:

cell.textLabel.text = [[dict allKeys] objectAtIndex:[indexPath row]];
cell.detailTextLabel.text = [dict objectForKey:cell.textLabel.text];

(我希望这是对的,我没办法在Xcode中立即测试它。)

答案 1 :(得分:1)

您可以创建一个关联数组,也称为“字典”。使用字典,您可以将字符串(值)与另一个(键)相关联。这样你就可以获得这样的东西:

"Company1" => "account code 1",
"Company2" => "account code 2",
...

然后,您可以使用allKeys方法迭代其键。 有关详细信息,请参阅NSMutableDictionary文档。