簡體   English   中英

appdelegate中的NSMutableArray-EXEC_BAD_ACCESS

[英]NSMutableArray in appdelegate - EXEC_BAD_ACCESS

我正在嘗試在appdelegate中使用全局數組作為我正在構建的演示的快速修復。 有關的代碼

.h文件具有聲明

{
NSMutableArray * trnEntered;
}

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

.m文件具有以下代碼-

trnEntered = [[NSMutableArray alloc] init];
NSLog(@“%@”,[trnEntered count]); //打印null。
[trnEntered addObject:@“ 1”];
NSLog(@“%@”,[trnEntered count]); //執行錯誤的訪問權限。

不知道我在哪里錯了。 看起來相當簡單。

我在這里先向您的幫助表示感謝,
特雅

您的代碼似乎有問題:

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

兩次對NSLog的調用都試圖將NSUInteger打印為Objective-C對象。 這將導致問題。 您應該使用NSLog(@"%d", [trnEntered count]);

我建議您閱讀有關格式說明符的更多信息,這里有很多有用的信息。

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

第一個NSLog不應打印'null',因為您的init方式有問題,請嘗試執行此操作。

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

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

NSLog默認情況下以String格式打印ans,因此,如果要打印整數值,則必須使用%d及其值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM