2013-04-29 3 views
-1

Я создаю приложение iOS, в котором используется SQLite DB. Я создал таблицу Как:Код NSCocoaErrorDomain = 3840 при извлечении NSDATA в NSDictionary

const char *sql_stmt = "CREATE TABLE IF NOT EXISTS ORDERTABLE (ID INTEGER PRIMARY KEY AUTOINCREMENT, ITEMDESC BLOB)"; 

, а затем я должен вставить self.selectedItemsDictnory словарь в ItemDESC я вставив как:

NSData *data = [NSJSONSerialization dataWithJSONObject:self.selectedItemsDictnory options:NSJSONWritingPrettyPrinted error:nil]; 

NSString *insertSQL = [NSString stringWithFormat: @"INSERT INTO ORDERTABLE(ITEMDESC)VALUES(\"%@\");",data]; 

Upto этого успешно сделано.

Теперь я должен получить этот словарь в таком же формате

то, что я делаю это:

if (sqlite3_prepare_v2(orderDB, sqlStatement, -1, &statement, NULL) == SQLITE_OK) { 

    while (sqlite3_step(statement) == SQLITE_ROW) { 
     int uniqueId = sqlite3_column_int(statement, 0); 

     const void *blob = sqlite3_column_blob(statement, 1); 
     NSInteger bytes = sqlite3_column_bytes(statement, 1); 
     NSData *data = [NSData dataWithBytes:blob length:bytes]; 
     NSError *error; 

     NSMutableString *jsonObject=[NSJSONSerialization 
             JSONObjectWithData:data 
             options:NSJSONReadingMutableLeaves 
             error:&error]; 
     NSLog(@"jsonObject is %@ with error %@",jsonObject, error); 

    } 

    sqlite3_finalize(statement); 
    sqlite3_close(orderDB); 
} 

И я получаю ошибку, как

Error Domain = NSCocoaErrorDomain Code = 3840 «Операция не может быть выполнена (ошибка Cocoa 3840.)» (текст JSON не начинался с массива или объекта и опции, позволяющей не создавать фрагменты.)

+0

и мой NSDictionary, который я вставляю, как пример: po self.selectedItemsDictnory $ 1 = 0x07184170 { Свет = 50; Pasta = 220; } Я попытался найти эту ошибку. Я обнаружил, что мой JSON, который я получаю, на самом деле не в формате JSON. – Sulabh

ответ

1

Вы не форматируете свойство JSON. В этом:

NSData *data = [NSJSONSerialization dataWithJSONObject:self.selectedItemsDictnory options:NSJSONWritingPrettyPrinted error:nil]; 

Теперь у вас есть сгусток данных, а не строка, но ниже, относиться к нему как строка:

NSString *insertSQL = [NSString stringWithFormat: @"INSERT INTO ORDERTABLE(ITEMDESC)VALUES(\"%@\");",data]; 

Если вы хотите строку:

NSString *jsonString = [NSString alloc] initWithData:data encoding: NSUTF8StringEncoding]; 
NSString *insertSQL = [NSString stringWithFormat: @"INSERT INTO ORDERTABLE(ITEMDESC)VALUES(\"%@\");",jsonString]; 
Смежные вопросы