2014-09-11 6 views
8

Swift에서 작업중인 RSS 피더 앱의 점프 시작으로 this tutorial을 따르고 있습니다. 이 자습서 이후로 Swift에서 변경된 사항이 몇 가지 있습니다. 그러나 그 중 아무 것도 왜이 문제를 겪고 있는지 설명하지 못합니다.Swift의 parser.parse()가 EXC_BAD_ACCESS로 연결됩니다.

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) 

} 

것은 내가 그들에 중단 점을 넣고 같이 실제 파서 위임 방법에 문제가있을 것 같지 않습니다 내 TableViewController에서 다음과 같이

관련 코드 (지금까지 내가 말할 수있는)입니다 그들은 추락하기 전에 전화조차되지 않습니다.

나의 가정은 신속한 버그이지만, 애플에게 불평하기 전에 뭔가를 놓치지 않았는지 확인하고 싶었습니다.

+0

실제 ParserDelegate 메소드를 포함하지 않았지만 David이 내 질문에 대답 할 수있어서 기쁩니다. 확실하게; 내 원래 방법은 다음과 같았습니다 : 'func 파서 (파서 : NSXMLParser, didStartElement 요소 이름 : 문자열, namespaceURI : 문자열, qualifiedName qName : 문자열, 속성 attributeDict : [NSObject : AnyObject])' 이 : 'func 파서 (파서 : NSXMLParser, didStartElement elementName : String, namespaceURI : String!, qualifiedName qName : String!, attributes attributeDict : [NSObject : AnyObject]!)' 다시 한번 감사드립니다! – 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 나를 완전히 구해 줬습니다. 완벽하게 좋은 XML 문자열을 파싱 할 때'EXC_BAD_ACCESS'를 보았습니다.'didStartElement'와'didEndElement' 대리자 메소드를 모두 업데이트하여'namespaceURI','qName' 및'attributeDict' 인수를 암시 적으로 래핑하고 이제 작동 중입니다. 큰. 고맙습니다! –

+0

나는 attributeDict가 선택적이어야한다고 생각하지 않는다. 확실히 나의 실험에서 그것은 항상 적어도 빈 사전이었다. –

0

이 버그는 @David가 이미 제안한 것과 동일한 방식으로 XCode 버전 6.1 (6A1052c), 에서 수정되었으므로 이 기록에 대한 것이므로 지금 수정되었습니다.