2012-02-08 76 views
0

我正在讀取數據庫中的文件路徑&將它們添加到我的委託中定義的數組(& alloc'd/initialised)之前將它們轉換爲NSURL。問題在於urlArray沒有被正確填充。將數據存儲在代理中定義的數組中

if (sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) { 

    const char *sql = "select coffeeID, coffeeName from coffee"; 
    sqlite3_stmt *selectstmt; 
    if(sqlite3_prepare_v2(database, sql, -1, &selectstmt, NULL) == SQLITE_OK) { 

     while(sqlite3_step(selectstmt) == SQLITE_ROW) { 

      NSInteger primaryKey = sqlite3_column_int(selectstmt, 0); 
      Coffee *coffeeObj = [[Coffee alloc] initWithPrimaryKey:primaryKey]; 
      coffeeObj.coffeeName = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 1)]; 

      coffeeObj.isDirty = NO; 

      NSString *path = coffeeObj.coffeeName; 
      NSURL *url = [[NSURL alloc] initFileURLWithPath:soundPath]; 
      [appDelegate.urlArray addObject:url]; 


      [appDelegate.coffeeArray addObject:coffeeObj]; 
      [coffeeObj release]; 
     } 
    } 
} 

我嘗試訪問urlArray發現它是空的

SQLAppDelegate *appDelegate = (SQLAppDelegate *)[[UIApplication sharedApplication] delegate]; 

NSURL *url0 = [appDelegate.urlArray objectAtIndex:0]; 

的網址是否正確創建,這只是他們似乎並不像預期的那樣加入到urlArray。有任何想法嗎?在此先感謝:)

+1

我不認爲你明白代表應該如何工作。你不應該直接調用代理屬性的方法,而是發送消息讓他們按照自己的意願去做。這可能不是問題,但你打破了標準的可可慣例。 – 2012-02-08 19:48:53

+0

好的,我一直在關注在Sqlite數據庫實現中找到的[tutorial](http://www.iphonesdkarticles.com/2008/10/sqlite-tutorial-selecting-data.html)。這就是我發現代碼的地方。感謝您的提示 – Octave1 2012-02-08 21:09:01

+0

什麼是聲音路徑,你在哪裏定義它?是否有可能你想從路徑創建NSUrl而不是聲音路徑? – AndreasZ 2012-02-08 22:38:19

回答

0

檢查appDelegate.url財產,也許是零,你永遠不初始化數組

您有內存泄漏,網址是不是realased。

+0

不,它已被初始化在AppDelegate – Octave1 2012-02-08 22:23:45

+0

你如何初始化數組? 莫比這樣的: 'coffeeArray = [NSMutableArray的陣列]' 如果是的話,你應該叫保留在物體,或使用點 確保您的代碼調用後初始化數組 – 2012-02-09 10:58:25

0

你應該檢查一下urlArray實際上是可變的(而不是普通的NSArray)。也請確保代碼已在執行之前初始化爲。如果您在查看urlArray的同一個地方檢查coffeeArray,那麼該數組是否包含您期望的數據?

編輯:在您自己對該主題的回答中,您將比較初始化本地變量以初始化臨時本地變量並將其分配給您的屬性。也許這實際上是差異(如果可能不如你的樣本那麼明顯)。

0

我通過添加一行代碼來獲得此功能 - 如下所示。我複製&這並獲得成功

最初我已經初始化的urlArray正常在另一部分中使用,如果教程(上面提到的)的技術:

NSMutableArray *urlArray = [[NSMutableArray alloc] init]; 

然而,當一個臨時陣列使用該固定問題 - 我不知道爲什麼:)

NSMutableArray *tempUrlArray = [[NSMutableArray alloc] init]; 
self.urlArray = tempUrlArray; 
相關問題