2012-07-04 52 views
0

我是使用C++後Objective-C的新手。 我在XML文件解析過程中遇到了使用NSMutableString的問題。 我與的NSMutableString結構是這樣的:NSMutableString append什麼都不做

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

然後,我宣佈CurrentStruct作爲我ParserDelegate的實例變量:

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

最後,我想追加一個字符串CurrentStruct.h_name(m_isName == YES):

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

但調試器說,CurrentStruct.h_name仍然爲0x0執行AppendString因爲之前它之後,雖然〜應變g變量具有所需的值。 我有點困惑,因爲它看起來像appendString只是跳過。 我會很感激任何幫助。謝謝!

+0

發送消息到零總是導致在ObjC無操作。如果您知道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]初始化]並釋放相同 –

+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

用戶沒有對ViewControllers進行引用,因此不應假定它們正在使用它們。總的來說,你的回答指出了問題並展示瞭如何解決這個問題,所以我沒有退縮 –

+0

@JamesWebster:我感謝你糾正我..我編輯了我的答案.. –

+0

每次解析器找到新字符時,都會覆蓋該字符串。我認爲這會產生非常意想不到的結果。 –