0
Ich brauche Hilfe. Ich schreibe App, die Daten speichern und gleichzeitig zeigen soll. Aber ich habe ein Problem. Beide Operationen funktionierten nur in der Hauptwarteschlange. Was ich tun kann? Vielen Dank!Arbeit mit Sqlite und UI-Aktion in der Hauptwarteschlange
Mein UI-Code
dispatch_async(dispatch_get_main_queue(), ^{
[self.hostView.hostedGraph reloadData];
});
Mein DB-Code
-(BOOL)addNewMesurable:(Mesurable*)mesurable{
if (!_database) [self createDatabase];
const char *charDBpath = [_dbPath UTF8String];
if (sqlite3_open(charDBpath, &_database) == SQLITE_OK) {
char* errorMessage;
sqlite3_exec(_database, "BEGIN TRANSACTION", NULL, NULL, &errorMessage);
NSString *query =
[NSString stringWithFormat:@"insert into %@ (value , date, time) values (? , ? , ?)",[Sensor sensorNameToString:
mesurable.sensor]];
sqlite3_stmt *statement;
if (sqlite3_prepare_v2(_database, [query UTF8String], -1, &statement, NULL) == SQLITE_OK) {
sqlite3_bind_text(statement, 1, [[mesurable.value stringValue] UTF8String], -1, NULL);
sqlite3_bind_text(statement, 2, [[mesurable getStrindDate] UTF8String], -1, NULL);
sqlite3_bind_text(statement, 3, [[mesurable getStrindTime] UTF8String], -1, NULL);
//
if(sqlite3_step(statement) != SQLITE_DONE){
NSLog(@"ERROR add data from sensor - %@ ", [Sensor sensorNameToString: mesurable.sensor ]);
}
else NSLog(@"Done");
sqlite3_clear_bindings(statement);
sqlite3_reset(statement);
sqlite3_exec(_database, "PRAGMA synchronous = OFF", NULL, NULL, &errorMessage);
sqlite3_exec(_database, "PRAGMA journal_mode = MEMORY", NULL, NULL, &errorMessage);
}
sqlite3_exec(_database, "COMMIT TRANSACTION", NULL, NULL, &errorMessage);
sqlite3_finalize(statement);
sqlite3_close(_database);
}
return YES;
}