2010-06-07 44 views
0

我想在appdelegate中使用全局數組作爲我正在構建的演示的快速修復。此在appdelegate NSMutableArray - EXEC_BAD_ACCESS

的.h文件中的相關代碼具有聲明

{
的NSMutableArray * trnEntered;
}

@屬性(非原子,保留)的NSMutableArray * trnEntered

.m文件具有下面的代碼 -

trnEntered = [[NSMutableArray裏的alloc] INIT];
NSLog(@「%@」,[trnEntered count]); //打印null。
[trnEntered addObject:@「1」];
NSLog(@「%@」,[trnEntered count]);//執行不良訪問。

不知道我在哪裏錯了。看起來非常簡單。

感謝您的幫助,
Teja。

回答

3

似乎有你的代碼有問題:

NSLog(@"%@",[trnEntered count]); // prints null. 
[trnEntered addObject:@"1"]; 
NSLog(@"%@",[trnEntered count]); // exec bad access. 

到NSLog的兩個呼叫嘗試打印NSUInteger作爲一個Objective-C的對象。這會導致問題。你應該使用NSLog(@"%d", [trnEntered count]);

我建議你閱讀更多關於format specifiers,有很多有用的信息。

更多信息:第二個NSlog試圖打印代碼聲明位於內存位置0x00000001的NSObject的description

+0

哎,我就知道是這樣的,我不能相信我浪費爲2小時這一點。謝謝! – 2010-06-07 15:59:41

+0

非常歡迎。我也花了太多時間在簡單的問題上:) – 2010-06-07 16:01:20

0

第一的NSLog不能打印「空」,你有你init.Try這個代替的方式有問題。

trnEntered = [[NSMutableArray alloc] initWithCapacity:1]; 
0
trnEntered = [[NSMutableArray alloc] init]; 
NSLog(@"%@",[trnEntered count]); // prints null. 
[trnEntered addObject:@"1"]; 
NSLog(@"%@",[trnEntered count]); // exec bad access. 

原因是因爲您使用格式化程序字符串錯誤。你正在嘗試使用一個整數作爲字符串指針,這當然會導致一個分段錯誤(或蘋果術語中的EXC_BAD_ACCESS)。使用%d打印一個整數,這是[trnEntered count]返回的值。

0

NSLog默認打印字符串格式的ans,所以如果你想打印整數值,那麼你必須使用%d及其值。

相關問題