我正在尝试保存已解析xml内容的数组元素。在NSLog
中显示的数组元素如下
ARRAY ELEMENTS (
)
2014-01-05 13:47:22.953 test[895:a0b] ARRAY ELEMENTS (
)
2014-01-05 13:47:22.953 test[895:a0b] ARRAY ELEMENTS (
)
2014-01-05 13:47:22.954 test[895:a0b] ARRAY ELEMENTS (
)
2014-01-05 13:47:22.954 test[895:a0b] ARRAY ELEMENTS (
)
2014-01-05 13:47:22.955 test[895:a0b] ARRAY ELEMENTS (
"M |HELLO| |HI|",
"M |HELLO |HI|"
)
当我尝试使用以下代码访问数组元素并获取通过[pipe]“|”分隔字符串的子字符串
for (int i =0; i < [finalArray count]; i++) {
NSString *substring = [[NSString alloc]init];
substring = [finalArray objectAtIndex:i];
if ([NSNull null] == [finalArray objectAtIndex:i]) {
NSLog(@"array object has nil value");
}
else{
NSArray *splitArray = [NSArray alloc];
splitArray = [substring componentsSeparatedByString:@""];
[finalSplitSMSArray addObject:splitSMSArray];
splitSMSArray = [[NSArray alloc]init];
}
}
但例外情况如下:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayM componentsSeparatedByString:]: unrecognized selector sent to instance 0x8999fa0'
*** First throw call stack:
(
0 CoreFoundation
答案 0 :(得分:2)
我不知道你想在这里完成什么,但似乎你需要很多帮助:)
让我们首先评论一些观点:
NSString *substring = [[NSString alloc]init];
更改为NSString *substring = [finalArray objectAtIndex:i];
。您的问题的答案:您获得的异常不是因为空值,而是意味着您尝试将消息“componentsSeparatedByString:”发送到nsarray而不是nsstring。 / p>
确保finalArray包含nsstring对象而不是nsarray。
3-简化它尝试用这个改变你的代码:
for (int i =0; i < [finalArray count]; i++)
{
NSString *substring = [finalArray objectAtIndex: i];
if (![substring isKindOfClass: [NSString class]])
NSLog(@"this is not a string");
else
{
NSArray *splitArray = [substring componentsSeparatedByString:@""];
[finalSplitSMSArray addObject:splitSMSArray];
}
}
答案 1 :(得分:0)
您可以尝试测试是否[substring length] == 0.
答案 2 :(得分:0)
错误消息'-[__NSArrayM componentsSeparatedByString:]...
表示方法componentsSeparatedByString:
已发送到NSMutableArray
的实例。
因此,即使您已将substring
声明为NSString
,但在运行时它也会充当NSMutableArray
。
我的建议是错误位于代码示例之外的某处。
答案 3 :(得分:0)
在我看来,数组中的nil值不是问题,在nil上调用方法将不起作用。 在调试器中查看此行substring
变量中的内容:
splitArray = [substring componentsSeparatedByString:@""];
以表示此时substring
是NSArray
对象,并且您正在尝试执行它没有'的方法componentsSeparatedByString:
实施。
我会改变这个:
NSArray *splitArray = [NSArray alloc];
进入这个:
NSArray *splitArray = [[NSArray alloc]init];
你可能错过了它:)
所以最终的代码看起来像这样:
for (id item in finalArray)
{
if(![item isKindOfClass:[NSString class]]){
continue;
}
NSArray *splitArray = [item componentsSeparatedByString:@""];
[finalSplitSMSArray addObject:splitArray];
}