Я использую подкласс 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. Спасибо за помощь.