我正在尝试将字符串拆分成部分并插入表中我应该怎么做?
我在分割数组时出错: - [__ 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"
)
请帮助我,谢谢。
答案 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 ...