хранение данных в массиве, который определен в делегате - PullRequest
0 голосов
/ 08 февраля 2012

Я читаю пути к файлам из базы данных и преобразую их в NSURL перед тем, как добавить их в массив, определенный (& alloc'd / initialized) в моем делегате.Проблема в том, что urlArray, который получает URL-адреса, не заполняется правильно.

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, чтобы найти, что он пустправильно, просто они, кажется, не добавляют в urlArray, как ожидалось.Есть идеи?заранее спасибо:)

Ответы [ 3 ]

0 голосов
/ 09 февраля 2012

Возможно, вам следует проверить, что urlArray действительно изменяемый (а не обычный NSArray).Также убедитесь, что делегат был инициализирован до выполнения вашего кода.Если вы проверяете coffeeArray там же, где вы смотрите на urlArray, содержит ли этот массив ожидаемые данные?

Редактировать: в своем собственном ответе на тему вы сравниваете инициализацию локальной переменной с инициализацией временной локальнойодин и присвоение его вашей собственности.Возможно, в этом и была разница (если, возможно, не такая очевидная, как в вашем примере).

0 голосов
/ 11 февраля 2012

Я получил это на работу, добавив строку кода - согласно ниже. Я скопировал технику, использованную в другой части, если учебник (упомянутый выше) и это помогло

Первоначально я инициализировал urlArray как обычно:

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

Однако, когда использовался временный массив, это решило проблему - я не уверен почему:)

NSMutableArray *tempUrlArray = [[NSMutableArray alloc] init];
self.urlArray = tempUrlArray;
0 голосов
/ 09 февраля 2012

Проверьте свойство appDelegate.url, возможно, это ноль, и вы никогда не инициализируете массив

У вас утечка памяти, URL-адрес не определен.

...