分配空字符串 - 抛出异常

时间:2011-01-14 04:08:28

标签: objective-c

你好 我遇到了这个问题,当我为变量xcode分配一个空字符串时抛出异常[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=@"";
}

但有没有一种正确的方法可以解决这个问题?

由于

2 个答案:

答案 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:返回的对象。