2011-08-17 114 views
0

嘿所有基本上我試圖保存一個自定義對象的數組,它保存很好,但是當我關閉應用程序並重新打開它實際上加載保存的數組(表入視圖),但凍結了,我得到的所有是SIGKILL。我如何找到導致問題的原因?如何診斷iPhone的SIGKILL錯誤?

這是我使用的,如果它有助於加載數據的代碼:

NSFileManager *fileManager = [NSFileManager defaultManager]; 

    if([fileManager fileExistsAtPath:dataFilePath]) { 
     // Load the array 
     NSMutableArray *arrayFromDisk = [NSKeyedUnarchiver 
              unarchiveObjectWithFile:dataFilePath]; 

     [Data sharedData].listOfItems = arrayFromDisk; 

     NSLog(@"Loaded"); 
    } 
+0

你有沒有看[這個問題](http://stackoverflow.com/questions/3098684/ iphone應用程序內運行的模擬器-4-0-收到-SIGKILL)? – jtbandes

+0

@jtbandes我將所有的數據保存在' - (void)applicationDidEnterBackground:'中,問題是當我重新打開應用程序時,我正在獲取一個sigkill。 –

回答

1

設置以下斷點可能幫助:

  • objc_exception_throw
  • malloc_error_break
  • [NSException提高]

檢查該線程的Xcode 4 https://devforums.apple.com/thread/68421

上的Xcode 3 http://blog.emmerinc.be/index.php/2009/03/19/break-on-exception-in-xcode/

希望這有助於

+0

我跟着你的鏈接添加了斷點,我正在嘗試學會如此忍受我,但我究竟在尋找什麼? –

+0

你應該嘗試重現相同的錯誤,當錯誤發生時,這個想法就是打破。通過這種方式,您可以知道錯誤的來源,或者至少知道錯誤來自何處。 – Lio

+0

好的,我仍然收到錯誤。雖然控制檯確實會說'重新啓用共享庫斷點1 重新啓用共享庫斷點3 待定斷點2 - 「malloc_error_break」已解決,如果這很重要... –

0

這聽起來像你的代碼可能會拋出異常,這將是最有可能在unarchiveObjectWithFile:發生。正常的行爲是記錄異常和堆棧跟蹤到控制檯(所以看看),但你也可以嘗試包裝在@try ... @catch通話,看是否實際上是一個異常被拋出:

@try { 
    // Load the array 
    NSMutableArray *arrayFromDisk = [NSKeyedUnarchiver 
             unarchiveObjectWithFile:dataFilePath]; 

    [Data sharedData].listOfItems = arrayFromDisk; 

    NSLog(@"Loaded");  
} 

@catch (NSException* e) { 
    NSLog(@"Caught exception: %@", e); 
} 
+0

對不起,我還是這個新手,我將如何登錄異常和堆棧跟蹤? (我知道NSLOG,只是我註銷了什麼?) –

+0

哦,我試過\ @try和\ @catch,但我仍然加載 –

+0

然後這個問題似乎並沒有與上面的代碼。您是否使用過調試器來查看應用程序終止的位置,或者查看控制檯以查看是否正在輸出錯誤消息? – bosmacs