[NSPlaceholderString initWithString:]: nil argument
我的方案是
1.建立与提供xml的服务器的连接。
2.分解xml并添加必要的变量,如下所示
NSString *city_xml=[[NSString alloc] init];
NSString *state_xml=[[NSString alloc] init];
NSString *country_xml=[[NSString alloc] init];
city_xml=[TBXML valueOfAttributeNamed:@"name" forElement:city];
state_xml=[TBXML valueOfAttributeNamed:@"state_name" forElement:city];
country_xml=[TBXML valueOfAttributeNamed:@"country_name" forElement:city];
NSLog(@"%@ %@ %@",city_xml,state_xml,country_xml);
//release the strings after using them
当xml返回一个空字符串时,会引发所述异常。
处理此异常的常用方法是什么?
我正在使用以下方法来解决问题......
if ([TBXML valueOfAttributeNamed:@"name" forElement:city]!=nil) {
city_xml=[TBXML valueOfAttributeNamed:@"name" forElement:city];
} else {
city_xml=@"";
}
if ([TBXML valueOfAttributeNamed:@"state_name" forElement:city]!=nil) {
state_xml=[TBXML valueOfAttributeNamed:@"state_name" forElement:city];
} else {
state_xml=@"";
}
if ([TBXML valueOfAttributeNamed:@"country_name" forElement:city]!=nil) {
country_xml=[TBXML valueOfAttributeNamed:@"country_name" forElement:city];
} else {
country_xml=@"";
}
但有没有一种正确的方法可以解决这个问题?
由于
答案 0 :(得分:0)
问题是,当xml属性没有值时,你没有为它分配一个空字符串,你要分配一个[NSNull null]
,显然你不能分配给它NSString的。检查nil值是我所知道的唯一处理它的方法。
答案 1 :(得分:0)
这是一个问题:
NSString *city_xml=[[NSString alloc] init];
...
city_xml=[TBXML valueOfAttributeNamed:@"name" forElement:city];
...
//release the strings after using them
您正在分配NSString并将其存储在city_xml
中,但随后您将新值分配给city_xml
,泄漏您分配的对象。
然后当您释放city_xml
时,您将释放一个您不拥有的对象(从-valueOfAttributeNamed:forElement:
返回的对象。