2015-07-08 2 views
-1

Я пытаюсь вставить записи в таблицу в sqlite3 со следующим кодом. Код работает отлично с iOS 8, но дает ошибку утверждения в iOS 7.1.2.Ошибка утверждения в MainViewController

Создание таблицы:

NSLog(@"database path %@",self.databasePath); 

    if ([manager copyItemAtPath:sourcePath toPath:self.databasePath error:&error] == NO) 
    { 
     NSLog(@"Error : %@", [error localizedDescription]); 

    } 
    // createStmt = nil; 
    if (sqlite3_open([self.databasePath UTF8String], &database) == SQLITE_OK) 
    { 
     const char *sql_stmt = "CREATE TABLE IF NOT EXISTS CategoryTable (mainimg BLOB,addimg BLOB,cat_nm TEXT,image_nm TEXT,lastmodified TEXT,cat_desc TEXT,prod_id TEXT,prod_nm TEXT,prod_desc TEXT,sku TEXT,supplier_id TEXT,supplier_phone TEXT,product_dosage TEXT,unit_size TEXT,unit_price TEXT)"; 

     //NSString *query=[NSString stringWithFormat:@"create table %@(rollNo integer, name text)",tableName]; 

     if (sqlite3_prepare_v2(database, sql_stmt, -1, &statement, NULL) != SQLITE_OK) { 
     } 
     sqlite3_exec(database,sql_stmt, NULL, NULL, NULL); 

     const char *sql_stmt_promo = "CREATE TABLE IF NOT EXISTS PromotionalData (ImageData BLOB,ThumbData BLOB)"; 
     if (sqlite3_prepare_v2(database, sql_stmt_promo, -1, &statement, NULL) != SQLITE_OK) { 
     } 
     sqlite3_exec(database,sql_stmt_promo, NULL, NULL, NULL); 
    } 
    sqlite3_close(database); 

Запись Вставка:

sqlite3 *database; 
if (sqlite3_open([appdelegate.databasePath UTF8String], &database) == SQLITE_OK) 
{ 
    sqlite3_stmt *statement; 

    const char* sqliteQuery = "INSERT INTO CategoryTable (mainimg,addimg,cat_nm,image_nm,lastmodified,cat_desc,prod_id,prod_nm,prod_desc,sku,supplier_id,supplier_phone,product_dosage,unit_size,unit_price) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; 

    if (sqlite3_prepare_v2(database, sqliteQuery, -1, &statement, NULL) == SQLITE_OK) 
    { 
     sqlite3_bind_blob(statement, 1, [mainimg bytes], [mainimg length], SQLITE_STATIC); 
     sqlite3_bind_text(statement, 2, [addimg UTF8String], -1, SQLITE_TRANSIENT); 
     sqlite3_bind_text(statement, 3, [cat_nm UTF8String], -1, SQLITE_TRANSIENT); 
     sqlite3_bind_text(statement, 4, [image_nm UTF8String], -1, SQLITE_TRANSIENT); 
     sqlite3_bind_text(statement, 5, [lastmodified UTF8String], -1, SQLITE_TRANSIENT); 
     sqlite3_bind_text(statement, 6, [cat_desc UTF8String], -1, SQLITE_TRANSIENT); 
     sqlite3_bind_text(statement, 7, [prod_id UTF8String], -1, SQLITE_TRANSIENT); 
     sqlite3_bind_text(statement, 8, [prod_nm UTF8String], -1, SQLITE_TRANSIENT); 
     sqlite3_bind_text(statement, 9, [prod_desc UTF8String], -1, SQLITE_TRANSIENT); 
     sqlite3_bind_text(statement, 10, [sku UTF8String], -1, SQLITE_TRANSIENT); 
     sqlite3_bind_text(statement, 11, [supplier_id UTF8String], -1, SQLITE_TRANSIENT); 
     sqlite3_bind_text(statement, 12, [supplier_phone UTF8String], -1, SQLITE_TRANSIENT); 
     sqlite3_bind_text(statement, 13, [product_dosage UTF8String], -1, SQLITE_TRANSIENT); 
     sqlite3_bind_text(statement, 14, [unit_size UTF8String], -1, SQLITE_TRANSIENT); 
     sqlite3_bind_text(statement, 15, [unit_price UTF8String], -1, SQLITE_TRANSIENT); 
     sqlite3_step(statement); 
     sqlite3_finalize(statement); 
     NSLog(@"inserted "); 
    } 
    else 
    { 
     NSAssert1(0, @"error:'%s'", sqlite3_errmsg(database)); 
     // NSLog(@"not inserted "); 
    } 
    sqlite3_close(database); 
} 

Сообщение об ошибке:

2015-07-08 08:54:17.819 SwaroopAgro[365:60b] Assertion failure in -[MainViewController Savemainimg:withaddimg:withcat_nm:withimage_nm:withlastmodified:withcat_desc:withprod_id:withprod_nm:withprod_desc:withsku:withsupplier_id:withsupplier_phone:withproduct_dosage:withunit_size:withunit_price:], /Users/dhananjaypatil/Desktop/swaroop/SW copy 8.1/swaroopAgro_iPhone 2/SwaroopAgro/MainViewController.m:700 2015-07-08 08:54:22.616 SwaroopAgro[365:60b] Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'error:'table CategoryTable has no column named mainimg'' *** First throw call stack: (0x30ba0f83 0x3b351ccf 0x30ba0e5d 0x3154ed5b 0xeae13 0xea563 0xe993f 0xedd7d 0x314e0fc3 0x314e0f07 0x314e0e21 0x308070e7 0x30805cf7 0x30ad48f1 0x3079d6bb 0x3079d579 0x3079d40d 0x30b6c20b 0x30b6b6db 0x30b69ecf 0x30ad4ebf 0x30ad4ca3 0x359da663 0x3342114d 0xc1ea5 0x3b85eab7) libc++abi.dylib: terminating with uncaught exception of type NSException

ответ

0

Электронный Сообщение об ошибке сообщает вам Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'error:'table CategoryTable has no column named mainimg''. Это довольно понятно: в таблице CategoryTable нет столбца mainimg, когда вы пытаетесь вставить значение - Я предполагаю, что это происходит во время вставки.

Поскольку ваше заявление CREATE TABLE IF NOT EXISTS четко создает этот столбец, я предполагаю, что вы иногда меняли схему данных таблицы в прошлом. На устройстве iOS8 вы установили приложение позже. На iOS7 вы уже установили приложение. Это приводит к тому, что таблица на iOS7 уже присутствует, с неправильной схемой, но присутствует. Поэтому он не будет создан и сохранит свою недействительную схему.

Попробуйте удалить приложение с устройства iOS7 и повторно запустить приложение после этого.

+0

Я попробовал его уже давно и теперь снова, но он не работал –

+0

@DhananjayPatil вы уже исправили его или он еще не работает? – luk2302

Смежные вопросы