3

データベースに何かを挿入しようとすると、次のエラーが発生します。

fmdb エラー 奇妙なことは、挿入先のテーブルに約12〜14の以前のレコードがある場合にのみエラーが発生することです。これを解決する方法を知っている人はいますか?

これが私のコードです:

 - (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];
}
4

3 に答える 3

3

は何型orderIDですか?それはどこから来ているのですか?ぶら下がっているポインターではないですか? にオブジェクトを渡すことだけが想定されていますexecuteUpdate:

また、あなたは過剰にリリースしていdbます。newメソッドの名前に、allocretain、またはが含まれていない限り、copy返されるオブジェクトはすべて自動解放されます。自分で解放する必要はありません。

于 2012-05-09T15:23:33.460 に答える
2

が定義されている場所orderIDは表示されませんが、( から派生した) オブジェクトでない場合は、NSObject表示したコードが壊れます。プリミティブ整数型の場合はNSNumber、他の値で行ったように、オブジェクトでラップする必要があります。

[NSNumber numberWithInt:orderID]
于 2012-05-09T15:25:26.387 に答える
0

ゾンビをオンにして、何が起こるか見てみましょう。

于 2012-05-09T23:37:10.980 に答える