Sto tentando di riprodurre la tabella SQLite3 come file .csv salvato nei documenti del telefono.Durante la scrittura su file di testo (aggiunta), l'ultimo valore che scrivo sostituisce tutti i valori precedenti
Per fare ciò, ho tentato di aggiungere una nuova riga alla fine del file, ogni volta che viene trovato un oggetto nel mio array, questo funziona, tuttavia sembra riprodurre l'ultima riga più e più volte per il numero esatto di righe nella mia tabella sql.
Ecco la query SQLite Select:
NSMutableArray *allGPS = [[NSMutableArray alloc] init];
GPS *gps = [[GPS alloc] init];
// Open the database from the users filessytem
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *databasePath = [documentsDirectory stringByAppendingPathComponent:@"GPS.db"];
if (sqlite3_open([databasePath UTF8String], &databaseHandle) == SQLITE_OK)
{
NSString *sqlStatement = [NSString stringWithFormat:@"SELECT * FROM GPSJob;"];
sqlite3_stmt *statement;
if(sqlite3_prepare_v2(databaseHandle, [sqlStatement UTF8String], -1, &statement, NULL) == SQLITE_OK) {
NSLog(@"Statement prepared");
while(sqlite3_step(statement) == SQLITE_ROW)
{
[gps setJobNo:[NSString stringWithUTF8String:(char *)sqlite3_column_text(statement,0)]];
[gps setSourceMonitor:[NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 1)]];
[gps setPositionNo:[NSNumber numberWithInt:sqlite3_column_int(statement,2)]];
[gps setLatitude:sqlite3_column_double(statement, 3)];
[gps setLongitude:sqlite3_column_double(statement, 4)];
NSLog(@"Source Monitor: %@", [gps sourceMonitor]);
[allGPS addObject:gps];
}
}
sqlite3_finalize(statement);
}
Ecco la scrittura in .csv metodo del file:
GPS *saveGPS = [[GPS alloc] init];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"/%@.csv", jobNo]];
[[NSFileManager defaultManager] createFileAtPath:filePath contents:nil attributes:nil];
NSFileHandle *myHandle = [NSFileHandle fileHandleForWritingAtPath:filePath];
DataController *dataController = [[DataController alloc] init];
NSString *csvTitleString [email protected]"Source/Monitor, PositionNumber, Latitude, Longitude \n";
[myHandle seekToEndOfFile];
[myHandle writeData:[csvTitleString dataUsingEncoding:NSUTF8StringEncoding]];
NSString *csvString = [[NSString alloc] init];
NSArray *allGPS = [[NSArray alloc]initWithArray:[dataController getAll]];
for(int i=0;i<(allGPS.count);i++){
saveGPS = [allGPS objectAtIndex:i];
csvString = [NSString stringWithFormat:@"%@, %d, %f, %f \n", [saveGPS sourceMonitor], [[saveGPS positionNo] intValue], [saveGPS latitude], [saveGPS longitude]];
[myHandle seekToEndOfFile];
[myHandle writeData:[csvString dataUsingEncoding:NSUTF8StringEncoding]];
Forse crei una nuova istanza di 'gps' in ogni iterazione? while (sqlite3_step (statement) == SQLITE_ROW) { gps = [[allocazione GPS] init]; [GPS setJobNo: [NSString stringWithUTF8String: (char ... ...} – GuyMontag
Se desideri che avete pubblicato come una risposta che avrebbe ottenuto la grazia :(:( –
Noooooooo Vabbè, lasciamo perdere ;) – GuyMontag