Я не уверен на 100%, потому что нет подробностей об ошибках, но похоже, что addStatement
не инициализируется. Objective-C инициализирует все указатели к 0, когда они размещены в стеке? Я знаю, что в Linux это не будет работать.
Возможно, попробуйте это: sqlite3_stmt *addStatement = nil;
Мне интересно, почему вы даже проверяете addStatement == nil
? Нет причин проверять это, поскольку вы должны инициализировать его в каждом случае.
Короче, переписать так:
(BOOL) addticket {
NSString *event=@"max";
NSString *venue=@"tvm";
sqlite3 *database;
databaseName = @"smbhDB.sql";
sqlite3_stmt *addStatement ;
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [documentPaths objectAtIndex:0];
const char *sql ="insert into tickets (venue, event,) Values (?,?)";
databasePath = [documentsDir stringByAppendingPathComponent:databaseName];
/* this is no longer conditional code */
if(sqlite3_prepare_v2(database, sql, -1, &addStatement, NULL) != SQLITE_OK)
NSAssert1(0, @"444 Error while creating add statement. '%s'", sqlite3_errmsg(database));
sqlite3_bind_text(addStatement, 1, [venue UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(addStatement, 2, [event UTF8String], -1, SQLITE_TRANSIENT);
if(SQLITE_DONE != sqlite3_step(addStatement))
NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(database));
sqlite3_reset(addStatement);
...