2010-11-07 48 views
0

我正在使用導航控制器的應用程序。當我建立時,我不會收到任何錯誤或警告。我已經在FirstViewController.m文件中定義了一個方法myMethod,然後在viewDidLoad中我調用[self myMethod];的方法。爲什麼在iPhone模擬器中崩潰的應用程序;我怎樣才能解決這個問題?

當我從控制檯構建並運行時,我什麼都沒有。所以我把NSLog()語句,像這樣:

-(void) viewDidLoad { 
NSLog(@"Entering viewDidLoad"); 
[self myMethod]; 
NSLog(@"Called myMethod"); 
[super viewDidLoad]; 
} 

控制檯不會返回第二的NSLog聲明,導致我相信,應用程序崩潰時調用的方法。

我試過這個模擬器設置爲iOS 4.0.1以及iOS 4.1。我正在構建iOS 4.1 SDK。我非常感謝您提供的任何幫助。

更新:我運行調試器,這似乎顯示問題在myMethod。在收到「EXC_BAD_ACCESS」之前,我只能通過該方法中的幾行代碼來完成此操作。的代碼行數:

-(void)myMethod { 
NSMutableArray *someStuff; 
NSMutableArray *someMoreStuff; 

stuffSections=[[NSMutableArray alloc] initWithObjects:@"Some Stuff",@"Some More Stuff",nil]; 

someStuff=[[NSMutableArray alloc] init]; 
someMoreStuff=[[NSMutableArray alloc] init]; 

[someStuff addObject:[[NSMutableDictionary alloc]initWithObjectsAndKeys:@"Item Name",@"name",@"Item Picture.png",@"picture",@"http://theurl.net/",@"url",@"1",@"itemCode",nil]]; 

但現在看來,我不能讓過去的東西添加到someStuff陣列第一次嘗試。

+0

設置斷點並使用調試器。並且實際上運行着附加的調試器(不僅僅是調試目標)。 – Eiko 2010-11-07 21:49:17

+0

好吧,我在[self myMethod]之後立即放置了斷點。在調試器控制檯中,它顯示「Program received signal:'EXC_BAD_ACCESS'。」不過,我是新手,不知道調試器窗口中的結果是什麼意思... – scojac 2010-11-08 05:54:40

+0

嘗試使用命令+ Y而不是命令+ R運行。這將與附加的調試器一起啓動。當程序崩潰時,執行會在違規行中暫停,讓您有機會找出它的位置並檢查當時變量的值。 – Tommy 2010-11-08 23:53:47

回答

0

看起來像「myMethod」中存在問題。如果我不得不猜測,我會說你試圖引用一個自動釋放而不保留的對象。

0

您在初始化someStuff和someMoreStuff時缺少alloc。它應該是

someStuff = [[NSMutableArray alloc] init]; 
    someMoreStuff = [[NSMutableArray alloc] init]; 
+0

我確實在代碼中有,但是沒有在這裏輸入。我想我會開始複製粘貼。對於那個很抱歉。 – scojac 2010-11-08 18:37:42

0

你是否交叉檢查了兩個MutableArrays?他們是否已成功分配?當應用程序進入損壞狀態時,您會收到「EXC_BAD_ACCESS」,通常是由於內存管理問題。我猜數組沒有分配。

試着用這種方式分配。

NSMutableArray * someStuff = [[NSMutableArray alloc]initWithCapacity:3]; 
NSMutableArray * someMoreStuff = [[NSMutableArray alloc]initWithCapacity:3]; 

添加一個斷點,檢查調試區域並確認它們是否被成功分配。如果每個數組都有內存,則分配它們。

相關問題