이상한 문제가 있습니다. 이상한 점은 코드가 놀이터에서 완벽하게 실행된다는 사실에서 비롯된 것입니다.하지만 시뮬레이터에서는 그렇지 않습니다.
길게 짧습니다. 나는 게으른 인스턴스를 생성하고 파싱 메서드를 호출하는 문서를 파싱해야하는 클래스가 있습니다. VC. 구문 분석 함수는 클래스에서 호출되지만 대리자 함수 (파싱 시작, 문자 발견 등)는 호출되지 않습니다.Swift NSXMLParserDelegate가 호출되지 않습니다.
protocol DefintionFetching {
func fetchingDidFinish(results: [String: NSMutableAttributedString])
}
class DefinitionFetcher: NSObject, NSXMLParserDelegate {
var delegate: DefintionFetching
var parser = NSXMLParser()
let url = NSURL(string: "http://dexonline.ro/definitie/soapta/xml")!
var element = String()
var finalDefinitions = [String: NSMutableAttributedString]()
init(delegate: DefintionFetching) {
self.delegate = delegate
super.init()
parser.delegate = self
}
func fetch() {
println("fetch called") // this gets called
parser = NSXMLParser(contentsOfURL: url)!
parser.parse()
}
func parser(parser: NSXMLParser!, didStartElement elementName: String!, namespaceURI: String!, qualifiedName qName: String!, attributes attributeDict: [NSObject: AnyObject]!) {
// this doesn't get called
}
}
그리고 VC 클래스를 호출 :
class DexVC: UIViewController, DefintionFetching {
lazy var definitionFetcher: DefinitionFetcher = DefinitionFetcher(delegate: self)
func fetchingDidFinish(results: [String: NSMutableAttributedString]) { }
@IBAction func doShit(sender: AnyObject) {
definitionFetcher.fetch()
}
}
같은 설정이 놀이터에서 잘 작동 이것은
구문 분석 클래스 (및 프로토콜) ..., 좀 미치게하다
도움이 될 것입니다 매우 높게 평가됩니다!
확인 반환 값()'. false 인 경우,'parser.parserError()'를 출력하십시오. –
체크 됨, 사실임 –