2012-04-24 142 views
0

我想解析一個XML文件,我通過URL獲得,然後我解析XML的每個元素,並將其添加到NSMutableDictionary中,調用objets一切順利,但是當我嘗試將myMutableDictionnary添加到myMutableArray時,使用什麼也沒有發生......將NSMutableDictionary添加到NSMutableArray

[myMutableArray計數]返回0 & [myMutableDictionary計數]返回3 //這是正確的

此處,我聲明我的變量接口:

@protocol XMLParserDelegate;//déclaration du delegate 

@interface XMLParser : NSObject <NSXMLParserDelegate>// on adopte le délégate NSXMLParserDelegate pour la classe 
{ 
NSXMLParser *monParseur; 
NSMutableArray *myMutablArray; 

NSMutableDictionary *myMutableDictionary; 

NSString *objetCourrant; 
NSMutableString *journalCourrant; 
NSMutableString *dateCourrant; 
NSMutableString *descriptionCourrant; 

id<XMLParserDelegate> delegate; //on déclare le délégate sous le nom de delegate 
} 
-(void)parseXMLByPath:(NSString*)chemin; 

@property (nonatomic,retain) NSMutableArray *maTabledeJournals; 
@property (nonatomic,retain) id<XMLParserDelegate> delegate; 

@end 
@protocol XMLParserDelegate <NSObject> 
-(void) parsingIsFinished; 
@end 

這裏是我定義我的語法分析器的地方:

-(void)parserDidStartDocument:(NSXMLParser *)parser 
{ 
myMutableArray=[[NSMutableArray alloc] init]; 
NSLog(@"Started"); 
} 
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict 
{ 

if (objetCourrant) { 
    objetCourrant=nil; 
}  
objetCourrant=[elementName copy]; 

if([elementName isEqualToString:kJournal ]) 
{ 
    if(myMutableDictionary) 
    { 
     myMutableDictionary=nil; 
    } 
    if(journalCourrant) 
    { 
     journalCourrant=nil; 
    } 
    if(dateCourrant) 
    { 
     dateCourrant=nil; 
    } 
    if(descriptionCourrant) 
    { 
     descriptionCourrant=nil; 
    } 

    myMutableDictionary = [[NSMutableDictionary alloc] init]; 


    journalCourrant = [[NSMutableString alloc] init]; 
    dateCourrant = [[NSMutableString alloc] init]; 
    descriptionCourrant = [[NSMutableString alloc] init]; 

    NSLog(@"is parsing..."); 
} 

} 
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
    { 

if([elementName isEqualToString:kJournal]) 
{ 

    [myMutableDictionary setObject:journalCourrant forKey:kTitre]; NSLog(@"%@",journalCourrant); 
    [myMutableDictionary setObject:dateCourrant forKey:kDate]; NSLog(@"%@",dateCourrant); 
    [myMutableDictionary setObject:descriptionCourrant forKey:kDescription]; NSLog(@"%@",descriptionCourrant); 

    NSLog(@"my dictionary %i",[myMutableDictionary count]); 

    [myMutableArray addObject:myMutableDictionary]; 

    NSLog(@"my array %i",[myMutableArray count]); 
} 

    } 

任何想法可能會造成麻煩嗎?

解決方案

,而不是添加到myMutableDictionary像myMutableArray如下:

[myMutableArray addObject:myMutableDictionary]; 

我所做的:

[self.myMutableArray addObject:myMutableDictionary]; 

和現在的一切工作正常。 謝謝你們的幫助!

+1

你不表明inits陣列的任何代碼。它存在嗎?嘗試記錄'myMutableArray'來驗證它不是零。 – 2012-04-24 13:05:45

+0

是的,它存在! – Hosni 2012-04-24 13:08:22

+0

你是什麼意思通過嘗試日誌記錄? – Hosni 2012-04-24 13:12:22

回答

2

你的代碼不工作的原因是你沒有初始化可變數組。

添加

myMutableArray = [[NSMutableArray alloc] init]; 

,你初始化變量

+0

它已初始化...我將現在編輯 – Hosni 2012-04-24 13:08:46

+0

你的控制檯中是否有「Started」字符串? – Alexander 2012-04-24 13:18:13

+0

是的,我得到的一切正確,但是[myMutableArray count]返回0 – Hosni 2012-04-24 13:19:09

0

嗯,我讀過其他的答案和評論,似乎你仍然有問題,這個工作最基本的代碼如下:

NSMutableArray * myArray = [[NSMutableArray alloc] init]; 
NSMutableDictionary * myDict = [[NSMutableDictionary alloc] init]; 
[myArray addObject:myDict]; 
NSLog(@"Count = %i", [myArray count]); // returns 1 

您可以發佈了@interface到已宣佈myMutableArray變量?

此外,這是最好的做法是不是有兩個函數/方法上,你必須在同一行稱:

[myMutableDictionary setObject:journalCourrant forKey:kTitre]; NSLog(@"%@",journalCourrant); 
[myMutableDictionary setObject:dateCourrant forKey:kDate]; NSLog(@"%@",dateCourrant); 
[myMutableDictionary setObject:descriptionCourrant forKey:kDescription]; NSLog(@"%@",descriptionCourrant); 
+0

我添加了界面,謝謝你的建議 – Hosni 2012-04-24 13:59:58

+0

在你的界面中你已經命名爲'NSMutableArray'爲:myMutablArray而不是myMutableArray? – Domness 2012-04-24 14:03:46

+0

不,我在這裏重命名它是可以理解的,它在我的代碼中命名有所不同,並且構建器不允許這樣愚蠢的錯誤 – Hosni 2012-04-24 14:11:13

相關問題