2016-02-03 1 views
0

Я использую подкласс NSXMLParser более шести месяцев без проблем в Snow Leopard. Когда я поместился в Маверикс, внезапно, я начал получать странные аварии в середине операции импорта. Я использовал Zombies, чтобы понять, в чем проблема, и кажется, что параметр elementName в методе протокола NSXMLParser освобождается преждевременно. Вот этот метод.NSXMLParser «elementName» освобожден преждевременно in didStartElement: метод протокола

- (void) parser: (SmartParser *) parser 
didStartElement:(NSString *)elementName 
    namespaceURI:(NSString *)namespaceURI 
    qualifiedName:(NSString *)qName 
    attributes:(NSDictionary *)attributeDict 
{ 
    if (nil != elementName) { 
     NSLog(@"STARTING: elementName is %@\n", elementName); // <= error here 
     if ([elementName isEqualToString: @"Root"]) { 

[Последовательность проверок для значений elementName. И, кстати, команда if (nil! = ElementName) {check and ensuing NSLog была добавлена ​​только для того, чтобы помочь определить ошибку, так как до этого я знал, что она разбилась на didStartElement:.]

Сообщение об ошибке, которое я получаю, : *** - [CFString respondsToSelector]: сообщение, отправленное высвобождены например 0x600000c326c0

Запуск зомби, я получаю: ELEMENTNAME NSString * имя класса = _NSZombie_CFString 0x0000600000c326c0

Получается, что ELEMENTNAME превращается в Строка зомби. Я никогда не изменяю elementName, поскольку это параметр, предоставленный методом протокола. Остальные мои протокольные методы довольно стандартизированы.

Как ни странно, тот же самый код, похоже, отлично работает с теми же данными в El Capitan, но пока мне нужно работать в Mavericks. Кроме того, это происходит с некоторыми данными, но не с другими, даже несмотря на то, что данные полностью прямые XML и несколько раз использовались в прошлом без проблем. Кто-нибудь знает, что происходит? Может ли это быть странной проблемой конфигурации, характерной для Mavericks. Спасибо за помощь.

ответ

0

ОК, это несколько неудовлетворительно, но я «решил» проблему, переключившись на ARC. Импорт, кажется, работает нормально сейчас, пока я не запускаю его в фоновом режиме.

На самом деле это не объясняет, как мой синтаксический анализатор может оставаться в памяти, но переменная element_name Apple была освобождена.