2012-04-11 16 views
0

我在調用以下方法後收到此異常。它只在應用第一次加載時纔會出現。當我再次打開應用程序,它工作正常。誰能幫忙?Exc_Bad_Access在Iphone中創建數據庫的例外

-(void) createAndCheckDatabase 
{ 
    BOOL success; 

    self.databaseName = @"database.db"; 
    NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentDir = [documentPaths objectAtIndex:0]; 
    self.databasePath = [[documentDir stringByAppendingPathComponent:self.databaseName]retain]; 

    NSFileManager *fileManager = [NSFileManager defaultManager]; 

    success = [fileManager fileExistsAtPath:self.databasePath]; 

    if(success) return; 

    NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:self.databaseName]; 

    NSError *err; 
    [fileManager copyItemAtPath:databasePathFromApp toPath:self.databasePath error:nil]; 
    if (err) { 
//  DebugLog(@"%@", [err description]); 
    } 

} 
+0

你可以粘貼/顯示屬性:self.databaseName?它是什麼?保留? – 2012-04-11 09:03:08

+0

@JonasSchnelli是它的保留 – 2012-04-11 09:16:36

+0

這就像一個內存泄漏:'self.databasePath = [[documentDir stringByAppendingPathComponent:self.databaseName] retain];'刪除'retain'。但是撞車不應該從那裏來。你用調試器完成了這個方法嗎?它在哪裏崩潰? – 2012-04-11 09:29:21

回答

2

if(err)... will crash,because err is not initialized!並且您不使用它在fileManager copyItemAtPath中:

+0

它沒有初始化意味着沒有設置爲零?在這種情況下是 – 2012-04-11 10:05:12

+2

。 – Chakalaka 2012-04-11 10:10:09

+1

如果您使用ARC,錯誤將被初始化爲零。否則它是「未定義的」,並且可能是垃圾值。更糟糕的是,它在調試版本中可能爲0,並且在模擬器和設備中運行時可能是不同的值。 – 2012-04-11 10:11:06

1

EXEC_BAD_ACCESS幾乎總是意味着要麼處理指針或C數組,要麼是對象超過-ed。

好消息是,您應該在調試器(如果在Xcode中運行的話)或崩潰日誌中具有堆棧跟蹤,以顯示出錯的地方。 (如何gatherread崩潰日誌)。

用殭屍工具「分析」你的代碼是獲得更多關於過量版本信息的最好方法。

如果您可以發佈符號化堆棧跟蹤,我們可以嘗試給您一個更好的診斷。