2014-09-11 6 views
8

Я следую this tutorial как начало перехода для приложения RSS-фидера. Я работаю в Swift. Я знаю, что есть некоторые вещи, которые изменились в Swift с этого урока, но ни один из них, похоже, не объясняет, почему у меня такая проблема.parser.parse() в Swift приводит к EXC_BAD_ACCESS

Соответствующий код (насколько я могу сказать) выглядит следующим образом в моем TableViewController:

override func viewDidLoad() { 
    super.viewDidLoad() 

    let url:NSURL = NSURL(string: "my.url.string") 
    parser = NSXMLParser(contentsOfURL: url) 
    parser.delegate = self 
    parser.parse() // <- Thread 1: EXC_BAD_ACCESS (code=1, address=0x0) 

} 

Там, кажется, не проблема с реальными методами синтаксического анализа делегата, как я ставлю точки останова на них и их даже не вызывают перед крушением.

Мое предположение заключается в том, что это ошибка Swift, но я хотел убедиться, что у меня ничего не было, прежде чем я начну жаловаться на яблоко.

+0

Я рад, что Дэвид смог ответить на мой вопрос, хотя я не использовал фактические методы ParserDelegate. Быть ясным; мои оригинальные методы выглядели примерно так: 'Func анализатор (парсер: NSXMLParser, didStartElement ELEMENTNAME: Строка, NamespaceURI: String, QualifiedName QName: String, атрибуты attributeDict: [NSObject: AnyObject])' и теперь они выглядят что-то вроде это: 'FUNC анализатор (парсер: NSXMLParser, didStartElement ELEMENTNAME: String, NamespaceURI: String !, QualifiedName QName: String !, атрибуты attributeDict: [NSObject: AnyObject]!)' Еще раз спасибо David! – ShivKatall

ответ

13

Ошибка в автоматически переведенных заголовках, предполагающая, что квалифицированные пространства имен всегда используются, так как иногда они могут быть ноль, он сбой.

Если вы используете:

func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String!, qualifiedName qName: String!, attributes attributeDict: [NSObject : AnyObject]!) 

, делая пространство имен и параметры QualifiedName неявно развернутый (или явно завернутые должны работать, как хорошо), вы должны быть хорошо идти.

Возможно, вам придется внести аналогичные изменения для любых предоставленных вами методов делегатов, которые принимают параметры namespaceURI или qualifiedName.

+0

Вот и все! Большое спасибо. Обернутый и разворачивающийся дополнительный материал - это далеко не то, что у меня сложнее всего понять быстро. Знаете ли вы, что в блоге или в учебнике есть что-то, что может помочь мне прибить это? – ShivKatall

+0

+1 Это полностью спасло меня. Я видел «EXC_BAD_ACCESS» при анализе идеально хорошей строки XML - я обновил оба метода делегата 'didStartElement' и' didEndElement', чтобы неявно развернуть аргументы 'namespaceURI',' qName' и 'attributeDict', и теперь он работает Великий. Спасибо! –

+0

Я не думаю, что атрибутDict должен быть необязательным. Довольно уверен, что в моих экспериментах это был всегда как минимум пустой словарь. –

0

Эта ошибка исправлена ​​в XCode Version 6.1 (6A1052c), таким же образом @David уже предложил, , но только для записи, теперь это исправлено.