2012-07-04 3 views
0

C++을 사용한 후에 Objective-C를 처음 사용했습니다. XML 파일 구문 분석 중에 NSMutableString을 사용하는 데 문제가 있습니다. 이 같은 인 NSMutableString와 구조체 한 : 그런 다음NSMutableString 추가가 수행하지 않음

struct HotelStruct { 
... 
NSMutableString *h_name; 
... 
}; 

, 내 ParserDelegate의 인스턴스 변수로 CurrentStruct를 선언 : 마지막으로

@interface ParserDelegate : NSObject <NSXMLParserDelegate> { 
... 
struct HotelStruct CurrentStruct; 
... 
} 

, 나는 (m_isName을 CurrentStruct.h_name에 문자열을 추가하는 것을 시도하고있다 == 예) :

-(void)parser:(NSXMLParser*)parser foundCharacters:(NSString *)string { 
if (m_isName) { 
[CurrentStruct.h_name appendString:string]; 
} 

그러나 디버거에서는 CurrentStruct.h_name이 이전과 같이 AppendString을 실행 한 후 0x0으로 유지되지만 strin g 변수는 필요한 값을가집니다. appendString이 그냥 건너 뛰었 기 때문에 다소 혼란 스럽습니다. 도움을 주시면 감사하겠습니다. 고맙습니다!

+0

메시지를 nil로 보내는 것은 항상 ObjC에서 no-op를 발생시킵니다. CurrentStruct.h_name == 0x0, appendString : 또는 다른 메시지를 보내면 아무런 차이가 없습니다. 0 –

+0

오와 곱하기로 생각해보십시오. CurrentStruct.h_name이 어딘가에없는 것처럼 보입니다. 나는 다른 사람의 프로젝트를 끝내고있다. 그래서 나는 그의 코드에 대답이있을 것 같다. 고마워, 정말 고마워. – Crtx

답변

0

구조 대신 표준 객체를 사용하지 않는 이유가 있습니까? 이것은 아마도 NSString이 초기화/할당되지 않았기 때문에 발생했을 것입니다.

이 시도 :

CurrentStruct-> h_name = [[NSString alloc] init]; 
+0

아마도 이유는 C++ 사용법입니다. MutableString을 할당했지만 아무 것도 변경하지 않았습니다. – Crtx

+0

내 편집을 확인하십시오 ... – Peres

3

을 당신은 당신의 문자열 객체를 초기화해야합니다

h_name = [[NSString alloc] init]; 

을 당신이 완료되면 그것을 해제하는 것을 잊지 마세요 :

[h_name release]; 
+0

구조에 묻혀 있기 때문에 CurrentStruct.h_name = [[NSMutableString alloc] init]; 및 –

+0

함께 초기화 할 동일한 릴리스 'CurrentStruct.h_name = [[NSMutableString alloc] init];' 그러나 아무것도 변경하지 않습니다 .. – Crtx

+0

그래서 초기화 코드와 관련 흐름을 게시 할 수 있습니까? – giorashc

0

그것을 잘 작동합니다.

-(void)parser:(NSXMLParser*)parser foundCharacters:(NSString *)string { 

    if (m_isName) { 

     if(!CurrentStruct.h_name) 
      CurrentStruct.h_name = [[NSMutableString alloc] init]; 

      [CurrentStruct.h_name appendString:string]; 

      NSLog(CurrentStruct.h_name); 
      NSLog(m_isName); 
     } 
    } 

참고 : 콘솔 로그와 을 확인하십시오. 사용 후 메모리을 놓아야합니다.

+0

사용자가 ViewController에 대한 참조를 만들지 않았으므로 사용하고 있다고 가정하면 안됩니다. 전반적으로, 당신의 대답은 문제를 지적하고 그것을 고치는 법을 보여주기 때문에 나는 downvote하지 않았다. –

+0

@JamesWebster : 나는 너를 고쳐 주셔서 고맙다. 나는 나의 대답을 편집했다. –

+0

파서가 새로운 문자를 찾을 때마다 문자열을 덮어 씁니다. 나는 이것이 매우 뜻밖의 결과를 가져올 것이라고 생각한다. –