2010-12-09 3 views
1

새내기 질문은 여기에 있습니다. 데이터 (예 : XML 파일), 보낼 적절한 Objective-C 메시지를 통해 지정할 수 있기를 바랍니다. 이것이 가능한지에 대한 조언이나 어떻게 할 수 있습니까?xml 데이터를 호출 할 obj-c 함수의 이름을 지정하는 방법

내가 할 수 없다면, 키 (int)와 함수 (나는 선택기라고도 함)를 연관시킬지도 개체를 만드는 방법이 될 것입니다. 위와 같은 경우 가능합니까?

튜토리얼이나 예제 코드를 참고로 가르쳐 주시면 큰 도움이 될 것입니다. 지금 나는 큰 switch 문을 가지고 일을하고 있고, 나는 그것을 좋아하지 않는다. (이드로 전환 할 때마다 특정 ID와 관련된 메소드를 명시 적으로 호출합니다.)

+0

심각하게 두 번 upvote 할 수 있으면 좋겠습니다. 일관된 질문과 초보자가 더 많이 묻는 질문. 건배. –

답변

1

이 질문에 대한 답변을 드리겠습니다. 너무 자주 나는 볼 수있다 사탄의 부은 스위치 성명. 대신 누군가가 함수 테이블을 사용하기를 원한다는 것을 알면 좋습니다.

일반적으로 XML로 인코딩 된 속성 목록 파일을 사용하는 것이 좋으면 매우 쉽습니다.

루트 요소가 일부 키에서 일부 선택자로 매핑되는 사전 인 속성 목록을 만드십시오.

Key    Type   Value 
---------------------------------------------- 
Root    Dictionary 
    firstKey  String  someSelector 
    secondKey  String  anotherSelector 

로드는 NSDictionary에 재산 목록의 내용 : 물론

id path = [[NSBundle mainBundle] pathForResource:@"filename" ofType:@"plist"]; 
id dict = [NSDictionary dictionaryWithContentsOfFile:path]; 

SEL selector = NSSelectorFromString([dict objectForKey:@"firstKey"]); 
if ([someObject respondsToSelector:selector]) { 
    [someObject performSelector:selector]; 
} 

, 당신은 적절한 방법으로이 논리를 리팩토링하려면, 아마도 인스턴스로 재산 목록을 캐시합니다 변하기 쉬운.

참고 : 필자는 개인적으로이 함수 테이블을 인라인으로 배치하는 것이 더 바람직하다고 생각합니다. 속성 목록은 멋지지만이 경우 매우 유용하다는 확신이 없습니다. 또한 Objective-C++을 사용하여 멋지다면 NSString 오브젝트 등의 셀렉터를 감싸거나 풀지 않고 도망 갈 수 있습니다.

+0

objective-C++ ??? :) – willcodejavaforfood

+0

Objective-C++는 Objective-C와 C++가 섞인 것입니다. –

관련 문제