2015-06-19 40 views
0

我使用來自https://github.com/nicklockwood/XMLDictionary的XMLDictionary解析xml字符串。 我有這樣的代碼:爲什麼在NSRangeException中崩潰?

NSURL *URL = [[NSURL alloc] initWithString:[self.rssFeed objectAtIndex:i]]; 
         NSString *xmlString = [[NSString alloc] initWithContentsOfURL:URL encoding:NSUTF8StringEncoding error:NULL]; 

         NSDictionary *xmlDoc = [NSDictionary dictionaryWithXMLString:xmlString]; 
         NSMutableArray *aux = [[NSMutableArray alloc]initWithArray:[[xmlDoc valueForKey:@"channel"]valueForKey:@"item"]]; 

並且在該行崩潰:

NSString *xmlString = [[NSString alloc] initWithContentsOfURL:URL encoding:NSUTF8StringEncoding error:NULL]; 

與此錯誤:

Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 5 beyond bounds for empty array' 

有人有什麼想法?好奇:每次運行此代碼時,應用程序都不會崩潰。 這部分方法是performSelectorInBackground。我認爲這是一個值改變

+0

研究錯誤消息,嘗試找出它應用於應用程序崩潰的行的含義。如有必要,請諮詢您不明白的部分。在該行添加一個斷點並檢查變量值。如有必要添加日誌語句。你真的需要能夠理解Objective-C錯誤消息和調試問題。 – zaph

回答

0

其實,我認爲它的崩潰上線前:

NSURL *URL = [[NSURL alloc] initWithString:[self.rssFeed objectAtIndex:i]]; 

穿上這條線斷點,看看有多少項目是在你的self.rssFeed陣列...

(劇透:你的數組實際上是空的。)

好運。

+0

12項。我檢查:) –

+0

該死!好的,然後我將objectAtIndex調用分成它自己的代碼行 - 在你的數組中創建一個包含適當值的NSString,然後(在下一行代碼中)創建一個NSURL。由於某種原因,Xcode仍然認爲你有一個'空數組'。也許這個第五個值是空白/零或什麼...? –

+0

...另一個測試:在NSURL代碼行中,擺脫[self.rssFeed objectAtIndex ...]部分,並查看如果只是在其中硬編碼URL字符串,會發生什麼情況。錯誤消失了嗎? –