2014-09-11 13 views
8

Tôi đang theo dõi this tutorial làm bước khởi đầu cho ứng dụng nạp RSS mà tôi đang làm việc trong Swift. Tôi biết có một số điều đã thay đổi trong Swift kể từ hướng dẫn này, nhưng không ai trong số họ dường như giải thích tại sao tôi gặp vấn đề này.parser.parse() trong Swift dẫn đến EXC_BAD_ACCESS

liên quan Mã (như xa như tôi có thể nói) là như sau trong TableViewController tôi:

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) 

} 

Hiện không có vẻ là một vấn đề với các phương pháp phân tích cú pháp đại biểu thực tế như tôi đặt breakpoint vào chúng và họ thậm chí không được gọi trước vụ tai nạn.

Giả định của tôi là đó là một lỗi Swift, nhưng tôi muốn chắc chắn rằng tôi đã không bỏ lỡ một cái gì đó trước khi tôi đi phàn nàn với táo về nó.

+0

Tôi rất vui vì David đã có thể trả lời câu hỏi của tôi, mặc dù tôi không bao gồm các phương pháp ParserDelegate thực tế. Để được rõ ràng; phương pháp ban đầu của tôi trông giống như sau: 'trình phân tích cú pháp func (trình phân tích cú pháp: NSXMLParser, didStartElement elementName: String, namespaceURI: String, qualifiedName qName: String, attributes attributeDict: [NSObject: AnyObject]) ' và bây giờ chúng trông giống như này: 'func parser (trình phân tích cú pháp: NSXMLParser, didStartElement elementName: String, namespaceURI: String !, qualifiedName qName: String !, attributes attributeDict: [NSObject: AnyObject]!)' Cảm ơn David! – ShivKatall

Trả lời

13

Dường như có lỗi trong tiêu đề được dịch tự động giả định rằng không gian tên đủ điều kiện luôn được sử dụng, tuy nhiên, vì chúng có thể không có lúc nào, nó bị lỗi.

Nếu bạn sử dụng:

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

bằng cách làm cho không gian tên và các thông số qualifiedName ngầm nào (hoặc bọc một cách rõ ràng nên làm việc cũng) bạn sẽ được tốt để đi.

Có thể bạn sẽ phải thực hiện các thay đổi tương tự cho bất kỳ phương thức ủy quyền nào mà bạn cung cấp có tham số namespaceURI hoặc qualifiedName.

+0

Điều đó đã làm được! Cảm ơn rất nhiều. Các gói và unwrapping công cụ tùy chọn là xa và đi những điều tôi đang có sự hiểu biết thời gian khó khăn nhất trong nhanh chóng. Bạn có biết một bài đăng trên blog hoặc hướng dẫn ở đâu đó có thể giúp tôi khắc phục sự cố đó không? – ShivKatall

+0

+1 Điều này đã lưu hoàn toàn cho tôi. Tôi đã nhìn thấy một 'EXC_BAD_ACCESS' khi phân tích chuỗi XML hoàn toàn tốt - tôi đã cập nhật cả hai phương thức ủy nhiệm' didStartElement' và 'didEndElement' của mình để ẩn hoàn toàn các đối số' namespaceURI', 'qName' và' attributeDict', và bây giờ nó đang làm việc tuyệt quá. Cảm ơn bạn! –

+0

Tôi không nghĩ rằng attributeDict cần phải là tùy chọn. Khá chắc chắn rằng trong các thí nghiệm của tôi, nó luôn luôn là một từ điển trống rỗng. –

0

Lỗi này được sửa trong XCode phiên bản 6.1 (6A1052c), theo cách tương tự @David đã đề xuất, nhưng chỉ cho bản ghi, hiện đã được khắc phục.

Các vấn đề liên quan