2012-05-09 2 views
2

Im получаю эту ошибку, когда им пытаются вставить что-то в моей базе данных:FMDB EXC_BAD_ACCESS когда вставки в базу данных

fmdb error Странная вещь, что ошибка возникает только тогда, когда есть около 12-14 previus записей в таблицу, в которую вставлять. Кто знает, как это решить?

Вот мой код:

- (void)addToBasket:(id)sender { 
    NSArray *sysPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *docDirectory = [sysPaths objectAtIndex:0]; 
    NSString *filePath = [NSString stringWithFormat:@"%@/MainDatabase.db", docDirectory]; 

    databasePath = filePath; 

    db = [FMDatabase databaseWithPath:databasePath]; 
    if (![db open]) { [db release]; return; } 

    NSInteger prodID = ((UIControl*)sender).tag; 

    [db executeUpdate:@"INSERT INTO order_items VALUES (?, ?, ?, ?)", @"", [NSNumber numberWithInt:prodID], orderID, [NSNumber numberWithInt:1], nil]; 

    [basket insertObject:[NSNumber numberWithInt:prodID] atIndex:0]; 
    [basketQA insertObject:[NSNumber numberWithInt:1] atIndex:0]; 
    [basketItemName insertObject:@"test" atIndex:0]; 
    [basketPrice insertObject:@"test" atIndex:0]; 

    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0]; 
    [self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; 

    [db close]; 
} 

ответ

3

Какой тип orderID? Откуда он? Вы уверены, что это не болтающийся указатель? Вы должны передавать объекты только executeUpdate:.

Кроме того, вы перевыпускаете db. Если у метода нет new, alloc, retain или copy на имя, любой возвращенный объект автореализован. Вам не нужно выпускать его самостоятельно.

+0

Тип идентификатора orderID - это номер NSNumber, но, как вы сказали, я перевыпускал 'db', который, как я думаю, вызвал ошибки. Он, наконец, работает теперь после удаления 'if (! [Db open]) {[db release]; вернуть; } '. Спасибо! – ebsp

+0

Я столкнулся с тем же сообщением об ошибке, и я не смог поймать какую-либо ошибку с зомби и все такое. И это было потому, что я не знал, что я могу передать только объекты! Огромное спасибо. – huggie

1

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

[NSNumber numberWithInt:orderID] 
Смежные вопросы