2012-02-08 32 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;