Назначение пустых строк - выбрасывает исключение - PullRequest
0 голосов
/ 14 января 2011

Привет Я столкнулся с этой проблемой, когда при назначении пустой переменной переменной 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 голосов
/ 14 января 2011

Вот проблема:

NSString *city_xml=[[NSString alloc] init];
...
city_xml=[TBXML valueOfAttributeNamed:@"name" forElement:city];
...
//release the strings after using them

Вы выделяете строку NSS и сохраняете ее в city_xml, но затем вы присваиваете новое значение city_xml, что приводит к утечке выделенного вами объекта.

Затем, когда вы отпускаете city_xml, вы освобождаете объект, который вам не принадлежит (объект, возвращенный из -valueOfAttributeNamed:forElement:.

0 голосов
/ 14 января 2011

Проблема в том, что когда атрибут xml не имеет значения, вы не назначаете ему пустую строку, вы назначаете [NSNull null], который (очевидно) вы не можете назначить для строки NSString. Проверка значения nil - единственный известный мне способ справиться с ним.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...