2012-03-15 3 views
2

Я не уверен, что это проблема симулятора, но я не помню эту проблему раньше, когда я использовал симулятор iPad 5.0 и ниже (теперь у меня работает симулятор iPad 5.1) , Я перепробовал метод описания для моего объекта состояния:Переопределение метода описания для NSObject

- (NSString *)description { 
    NSString *str = [[NSString alloc] initWithFormat:@"Condition: %@", _conditionName]; 
    return [str autorelease]; 
} 

У меня есть массив этих объектов. Мои значения действительны. Когда я это делаю:

for (Condition *p in self.reportsArray) { 
    NSLog(@"%@", [p description]); 
} 

Он регистрирует все мои значения, а затем он падает в конце. Когда я смотрю Инструменты с зомби, последние 4 звонка:

-[NSPlaceHolderString initWithBytes:length:encoding:] 
+[NSString stringWithUTF8String:] 
-[NSAutoreleasePool release] 
-[NSPlaceholderString initWithFormat:locale:arguments:] 

Я правильно определяю описание?

Редактировать: В Инструментах я получаю: сообщение было отправлено на освобожденный объект (зомби) по адресу: 0x8ccf190. В самом приложении я получаю EXC_BAD_ACCESS.

+1

Почему вы не мигрируете в ARC? – akashivskyy

+1

Является ли '_conditionName' действительным объектом Objective-C? –

ответ

3

Кажется, что строка, возвращаемая из вашего метода описания, выпущена слишком рано.

Попробуйте переписать метод, используя метод класса stringWithFormat:.

- (NSString *)description { 
    return [NSString stringWithFormat:@"Condition: %@", _conditionName]; 
} 
+0

Это то, что я всегда делаю, никогда не испытываю проблем. – QED

+1

@jonkroll Это интересно, хотя, поскольку я думал, что alloc] init] autorelease будет таким же, как возврат автореализованной NSString? – Crystal

+1

@ Кристалл: Честно говоря, я тоже так думал. Признаюсь, я не совсем понимаю, что происходит в этой ситуации. – jonkroll

0

Убедитесь, что _conditionName не является примитивным. Потому что строка формата «% @» ожидает объект.

Смежные вопросы