2010-03-24 28 views
0

IET另一編輯(增加奇怪) 編輯顯示相關部分的代碼NSMutableArray正在破壞我的生活!

嗨。有有一個NSMutableArray一個奇怪的問題,我只是不理解......

解釋:

我有一個NSMutableArray的,定義爲一個屬性(非原子,保留),合成,並與29個元素初始化。

realSectionNames = [[NSMutableArray alloc] initWithCapacity:29]; 

初始化後,我可以插入元素,因爲我希望和一切似乎工作正常。然而,當我運行應用程序時,如果我在數組中插入一個新元素,我可以在插入元素的函數中打印該數組,並且一切似乎都正常。

但是,當我在表中選擇一行並需要讀取該數組時,我的應用程序崩潰。事實上,它甚至無法打印陣列。

當使用像我這樣的初學者可能會丟失的NSMutableArray時,每個人都應該知道是否有任何「魔法和邏輯技巧」?

非常感謝。

我宣佈我的數組作爲

realSectionNames = [[NSMutableArray alloc] initWithCapacity:29]; 

我插在我的數組對象與

[realSectionNames addObject:[category categoryFirstLetter]]; 

雖然我知道我還可以

​​

插入其中「我「是第一個非佔領的位置。

插入後,我重新加載我的tableView的數據。在重新加載數據之前或之後打印數組顯示它具有所需的信息。

之後,在表中選擇一行會導致應用程序崩潰。這個realSectionNames在幾個UITableViewDelegate函數中使用,但對於這種情況並不重要。真正重要的是,在didSelectRowAtIndexPath函數的開頭打印數組會崩潰所有內容(當然,不會打印任何內容)。我敢肯定,這是該行中,用於打印任何東西,他的作品前行(例如):

NSLog(@"Anything"); 
NSLog(@"%@", realSectionNames); 

給出了輸出:

2010-03-24 15:16:04.146 myApplicationExperience [3527 :207]任何

[會話開始於2010-03-24 15點16分04秒+0000] GNU GDB 6.3.50-20050815(蘋果版GDB-967)(星期二7月14日02:11: 58 UTC 2009) 版權所有2004自由軟件基金會,Inc. GDB是免費軟件,由GNU Ge neral公共許可證,你是 歡迎在特定條件下更改和/或分發它的副本。 輸入「show copying」查看條件。 GDB絕對沒有保修。請輸入「顯示保修」以瞭解詳情。 這GDB被配置爲「I386的蘋果達爾文」 .sharedlibrary應用負載規則所有附加 處理3527

還沒了解什麼樣的愚蠢的我做了這個時候...也許這不是來不及追隨腦外科醫生的職業?

以下一個答案,我印刷

NSLog(@"self=%x", self); 
NSLog(@"self=%@", self); 
NSLog(@"realSectionNames=%x", realSectionNames); 

給出每個功能完全相同的結果(從代表或沒有)。

NSLog(@"realSections = %@", realSectionNames); 

版畫以及在我的viewWillAppear中,在didSelectRowAtIndexPath方法,和崩潰的viewForHeaderInSection。沒有穿線,順便......

所以,不知道該怎麼辦,我想「的事情」 ......我改self.realSectionNames realSectionNames的所有引用

在viewForHeaderInSection打印功能使以下問題:

2010-03-24 16:01:44.067 myApplication[4104:207] numberOfSectionsInTableView result -> 1 
2010-03-24 16:01:44.068 myApplication[4104:207] viewForHeaderAtSection 
2010-03-24 16:01:44.068 myApplication[4104:207] self=3d13470 
2010-03-24 16:01:44.068 myApplication[4104:207] self=<RootViewController: 0x3d13470> 
2010-03-24 16:01:44.069 myApplication[4104:207] self.realSectionNames=3b12830 
2010-03-24 16:01:44.070 myApplication[4104:207] realSections = (
    <__NSArrayReverseEnumerator: 0x3b50500> 
) 
2010-03-24 16:01:44.070 myApplication[4104:207] *** -[__NSArrayReverseEnumerator length]: unrecognized selector sent to instance 0x3b50500 
2010-03-24 16:01:44.071 myApplication[4104:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSArrayReverseEnumerator length]: unrecognized selector sent to instance 0x3b50500' 
2010-03-24 16:01:44.072 myApplication[4104:207] Stack: (
    31073371, 
    2572170505, 
    31455291, 
    31024758, 
    30877378, 
    276908, 
    26404, 
    3227182, 
    4544033, 
    4551926, 
    4550923, 
    3267462, 
    3207973, 
    3249408, 
    25927, 
    3222086, 
    3205252, 
    459178, 
    30857920, 
    30854216, 
    39163413, 
    39163610, 
    2949039 
) 

什麼是NSArrayReverseEnumerator?爲什麼它對我意味着?

+2

任何機會看到崩潰的代碼?很難猜測問題是什麼...... – Vladimir 2010-03-24 14:37:50

回答

1

當應用程序崩潰時,Xcode控制檯將報告導致應用程序崩潰的錯誤。您需要編輯您的問題以包含此錯誤消息以及相關的源代碼,因爲這有助於他人回答您的問題。

我懷疑你所選擇的錶行試圖指向數組中的索引,該索引不存在。如果是這樣,你試圖引用不存在的數組的一部分。這會導致您的應用程序拋出異常並退出。

請記住,NSMutableArray可以初始化爲某個容量,但是直到插入項目爲止,它實際上並不包含任何對象。 -initWithCapacity:方法僅預留了一定量的內存,但是沒有佔位符或到n索引的nil條目。

0

1)我們能否知道錯誤信息?和代碼的相關部分?

2)這裏是來聲明數組的正確方法:

self.realSectionNames = [[NSMutableArray arrayWithCapacity:29]; 
+0

使用alloc和init創建一個NSMutableArray沒什麼問題,尤其是當你需要在autorelease池耗盡時需要保留它。 – 2010-03-24 15:28:21

+1

那麼爲什麼綜合它,如果你不使用setter? – chacha 2010-03-24 15:37:35

0

我懷疑你的TableView的委託不掛鉤正確,或連接到一個無效的對象。你的其他委託方法是否有效?嘗試把這些在didSelectRowAtIndexPath方法頂部檢查指針值:

NSLog(@"self=%x", self); 
NSLog(@"self=%@", self); 
NSLog(@"realSectionNames=%x", realSectionNames); 
+0

NSLog(@「self =%x」,self); NSLog(@「self =%@」,self); NSLog(@「realSectionNames =%x」,realSectionNames);在任何地方給出完全相同的結果NSLog(@「realSections =%@」,realSectionNames);在我的viewWillAppear中,在didSelectRowAtIndexPath中打印並在viewForHeaderInSection中崩潰。 – camilo 2010-03-24 15:56:32

3

注意事項給大家(和特製自己)......

我是個啞巴,啞巴男孩。

我發佈了一個插入數組的元素。

對不起,若要回答問題,謝謝你的回答...