拆分nsstring并放入tableview

时间:2012-07-23 07:53:51

标签: objective-c uitableview nsarray xcode4.3

我正在尝试将字符串拆分成部分并插入表中我应该怎么做?

我在分割数组时出错: - [__ NSArrayI componentsSeparatedByString:]:无法识别的选择器发送到实例0x7a421e0

NSArray *BusRoute = alightDesc;
int i;
int count = [BusRoute count];
for (i = 0; i < count; i++)
{  
    NSDictionary *dic = [BusRoute objectAtIndex: i];
    NSDictionary *STEPS = [dic valueForKey:@"STEPS"];            
    NSString *AlightDesc = [STEPS valueForKey:@"AlightDesc"];
    NSLog(@"AlightDesc = %@", AlightDesc);

    NSArray *aDescArray = [AlightDesc componentsSeparatedByString:@","];
    NSLog(@"aDescArray = %@", aDescArray);
}

这是我分裂的字符串,我是从NSLog

获得的
AlightDesc = (
"Block1",
"Block2",
"Block3"
)

请帮助我,谢谢。

2 个答案:

答案 0 :(得分:0)

您的NSString * AlightDesc应如下所示

 NSString *AlightDesc = "Block1,Block2,Block3";
 NSArray *aDescArray = [AlightDesc componentsSeparatedByString:@","];

如果您的字符串是您所说的

 AlightDesc = ("Block1","Block2","Block3"); 

然后你的字符串就是问题,因为它已经被打破了。

答案 1 :(得分:0)

目标C不是强类型语言。您对[STEPS valueForKey:@"AlightDesc"]肯定知道的是它将返回一个对象(类型为id)。当您编写NSString *AlightDesc = [STEPS valueForKey:@"AlightDesc"]时,编译器没有抱怨,因为NSString *是有效的对象类型。不幸的是,您的代码中存在逻辑错误,因此实际存储在密钥@"AlightDesc"下的内容是NSArray。正如其他人所提到的,NSArray不响应componentsSeparatedByString:,因此您在运行时会收到错误。

对此的简单修复就是纠正您的逻辑:首先存储NSString或者将您获得的内容视为NSArray。正如@janusfidel所提到的,您可以使用NSArray获取所需条目的字符串,从而在表格中完美地使用objectAtIndex:

在一些更复杂的情况下,您可能不知道您将从字典中获取特定键的内容。在这种情况下,在Objective C中你可以问对象:

id anObject = [STEPS valueForKey:@"AlightDesc"];
if ([anObject isKindOfClass:[NSString class]]) {
    NSString *aString = (NSString *)anObject;
    // Treat as a string ...
} else if ([anObject isKindOfClass:[NSString class]]) {
    // Object is an array ...