2016-07-22 2 views
2

XML 파일의 출력을 기반으로 객체를 동적으로 생성하려고합니다. 이 주제에 대한 다른 게시물이 있으면 사과 드리며,이 사실을 알지도 못합니다. 기본적으로 어떤 클래스라도 될 수있는 객체의 스택을 만들고 싶습니다. 요컨대, NSXMLParser의 "didStartElement"가 호출 될 때 "elementName"유형의 객체를 만들고이를 객체 스택에 스택 싶습니다. 아래 코드는 작동하지 않고 단지 내가 성취하고자하는 것을 설명하려고합니다. 일반적으로 "objectStack.append (object) as object"를 넣을 것입니다. 그러나이 경우에는 요소가 XML 파서로 스캔 될 때까지 객체 유형이 어떻게 될지 알 수 없습니다. NSClassFromString이 일을하는 방법이라고 생각하지만 작동하지 않습니다.Swift : 동적 객체 생성

func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]) { 

    objectStack.append(NSClassFromString(elementName)) 

} 

모든 도움을 주시면 감사하겠습니다. 비록 당신이 옳은 방향으로 나를 겨냥 할 수 있다고하더라도.

+0

는 말? 뭐가 잘못 됐어? 실제로 alloc & init 객체를 필요로한다고 생각합니다.'objectStack.append (NSClassFromString (elementName)())'여분의'()'를 주목하십시오. – sbarow

+1

방금 ​​문제가 해결되어 정말 가까이에있었습니다. 요소 이름 앞에 프로젝트 이름을 추가하면됩니다. 따라야 할 작업 코드. – GED125

답변

1

제대로 작동 했으므로 프로젝트 이름과 함께 클래스의 정규화 된 이름이 필요하다는 것이 문제였습니다.

근무 코드 : 그 작동하지

var objectStack = [AnyClass]() 
func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]) { 

    var className = String(NSString(format: "MyProject.%@", elementName)) 
    objectStack.append(NSClassFromString(className)!) 
} 
+0

NSObject, AnyObject, Any, 구조체 및/또는 별칭에 대해 작동합니까? –

+0

솔직히 말해서 나는 시도하지 않았다. 나는 NSObject에서만 이것을 사용했다. 내 코드가 개체를 초기화하기 위해 다시 변경되었습니다. 원한다면 업데이트 된 코드를 게시 할 수 있습니다. – GED125