2011-05-27 45 views
2

我有一個處理數據庫操作的對象。它開始與:奇數NSString行爲「警告:無法讀取符號...」

-(id)init{ 
    databaseName = @"WhoPaidLast.sql"; 

    // I think this one gets it from the app whereas the next one gets it from the phone 
    // databasePath = [[NSBundle mainBundle] pathForResource:@"WhoPaidLast" ofType:@"sql"]; 

    // Get the path to the documents directory and append the databaseName 
    NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDir = [documentPaths objectAtIndex:0]; 
    self.databasePath = [documentsDir stringByAppendingPathComponent:databaseName]; 

    // Execute the "checkAndCreateDatabase" function 
    [self checkAndCreateDatabase]; 

    return self; 

在本月底我檢查DB:

-(void) checkAndCreateDatabase{ 
    // Check if the SQL database has already been saved to the users phone, if not then copy it over 
    BOOL success; 

    // Create a FileManager object, we will use this to check the status 
    // of the database and to copy it over if required 
    NSFileManager *fileManager = [NSFileManager defaultManager]; 

    // Check if the database has already been created in the users filesystem 
    success = [fileManager fileExistsAtPath:self.databasePath]; 

    // If the database already exists then return without doing anything 
    if(success) return; 

    // If not then proceed to copy the database from the application to the users filesystem 

    // Get the path to the database in the application package 
    NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:databaseName]; 

    // Copy the database from the package to the users filesystem 
    [fileManager copyItemAtPath:databasePathFromApp toPath:self.databasePath error:nil]; 

    //[fileManager release]; 
} 

在此之後,當我去使用databasePath我只似乎能夠它拋出之前使用一次這個錯誤:

warning: Unable to read symbols for /Developer/Platforms/iPhoneOS.platform/DeviceSupport/4.3.1 (8G4)/Symbols/Developer/usr/lib/libXcodeDebuggerSupport.dylib (file not found). 

我有一個從數據庫返回一堆值的函數。第一次使用detabasePath時,它工作正常並輸出預期值,第二次拋出上述錯誤。

這裏是函數的開頭:

// Setup the database object 
    sqlite3 *database; 

    // Init groupsArray 
    groupsArray = [[NSMutableArray alloc] init]; 


    NSLog(@"r- %@",self.databasePath); 
    NSLog(@"s- %@",self.databasePath); 
    // Open the database from the users filessytem 
    if(sqlite3_open([self.databasePath UTF8String], &database) == SQLITE_OK) { 

如果我刪除第二個NSLog的函數,那麼錯誤被用於下一次databasePath。如果我刪除它,它將爲sqlite3_open函數工作,但在下次使用時出錯。

如果有人知道我錯誤的來源和/或我可能做錯了什麼,我非常感謝你的幫助。

謝謝。

回答

0

看起來上面的代碼中存在一些與內存管理相關的錯誤。我猜測你看到的調試器錯誤是由於調試器不能鎖存到給你一個堆棧跟蹤的內存相關崩潰。

首先,你的-init方法永遠不會在超類上調用它,這是不對的。你需要有類似

if (!(self = [super init])) 
{ 
    return nil; 
} 

在該方法的開始。

這樣一來就會導致各種有趣的崩潰。除此之外,請確保databasePath屬性設置爲使用copyretain(最好是copy,因爲它是NSString),或者它不會保留由[documentsDir stringByAppendingPathComponent:databaseName]返回的自動釋放對象。

另外,我知道你已經註釋掉了,但不要使用[fileManager release]。這是你從[NSFileManager defaultManager]得到的共享實例,但你沒有保留它,所以釋放會導致不好的事情。

你可以嘗試啓用斷點並打開NSZombie來找到你的具體的崩潰位置,但我敢打賭,原因是我上面列出的因素之一。

0

這是式IO/Xcode中的4

中的錯誤

終端
cd /Developer/Platforms/iPhoneOS.platform/DeviceSupport/4.3.1\ \(8G4\)/Symbols/ 

sudo ln -s /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk/Developer/ Developer 

清潔(移+ CMD + k)的項目之前運行它輸入以下2個命令。問題應該解決。

Ref:http://blog.damore.it/2011/04/xcode4-debugging-problem-warning-unable.html

相關問題