Vielen Dank im Voraus für Ihre Zeit zum Lesen und hoffen, mir zu helfen. Ich bin relativ neu in der Codierung und das aktuelle Problem, mit dem ich konfrontiert bin, ist;Wie ruft man eine int/NSNumber auf und ruft sie beim Aufruf einer sqlite3-Datenbank in Objective-C auf?
Ich habe eine SQLite3-Datenbank mit drei Spalten erstellt, die jeweils als gespeichert werden; string, float und ein int. Beim Versuch, die Spalten zu lesen und darzustellen, habe ich Probleme, eine Methode zu finden, um die Werte float und int darzustellen.
Die drei Eigenschaften, die in der Datenbank gespeichert sind, werden wie folgt festgelegt:
@property (nonatomic, strong) NSString *name;
@property (nonaomtic, strong) NSNumber *price;
@property (nonaomtic, strong) NSNumber *quantity;
Ich bin mir nicht sicher, ob vielleicht die letzten beiden Eigenschaften in Float und Int ändern würde einen Unterschied machen?
Allerdings liegt die Hauptverwirrung für mich in dem folgenden Code, den ich gemacht habe, um die Datenbank aufzurufen;
-(void)readDataFromDatabase{
[self.stock removeAllObjects];
sqlite3 *database;
if (sqlite_open([self.databasePath UTF8String], &database) == SQLITE_OK) {
char *sqlStatement = "select * from entries";
sqlite3_stmt *compiledStatement;
if (sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK){
while(sqlite3_step(compiledStatement) == SQLITE_ROW{
char *n = sqlite3_column_text(compiledStatement, 1);
char *p = sqlite3_column_int(compiledStatement, 2);
chat *q = sqlite3_column_int(compiledStatement, 3);
NSString *name = [NSString stringWithUTF8String:n];
NSNumber *price = [NSString stringWithUTF8String:p];
NSNumber *quantity = [NSString stringWithUTF8String:q];
Data *data = [[Data alloc] initWithData:name thePrice: price theQuantity:quantity];
[self.stock addObject:data];
}
}
sqlite3_finalize(compiledStatement);
}
sqlite3_close(database);
}
Mein gesunder Menschenverstand sagt mir, das Problem in diesem Abschnitt liegt;
NSString *name = [NSString stringWithUTF8String:n];
NSNumber *price = [NSString stringWithUTF8String:p];
NSNumber *quantity = [NSString stringWithUTF8String:q];
Ich bin mir nicht sicher, wie ich die NSNumber nähern sollte? Ich bin mir bewusst, dass der NSString stringWithUTF8String nicht korrekt ist, aber ich kenne nicht die Entsprechung für NSNumber.
Ich würde wirklich jede Einsicht und Hilfe in dieser Angelegenheit schätzen.
Vielen Dank!
Warum denken Sie nicht, dass "NSString stringWithUTF8String" korrekt ist? Außerdem sind Sie auf dem richtigen Weg, wenn Sie "NSNumber" durch "float" und "int" ersetzen, wenn sie das benötigen (zB '@property (nonaomtic, strong) float price;' usw.)Da du sie in deiner Kopfzeile deklarierst, müßtest du nur folgendes tun: 'price = (dein Gleitkommawert);' ... –
Vielen Dank für deine Antwort! Mein bisheriges Verständnis scheint mich zu alarmieren, dass der Versuch, eine NSNumber zu setzen, eine Methode ist, die auf die Klasse von NSString anwendbar ist, um einfach nicht korrekt zu sein? Wie ich glaube (bitte korrigieren Sie mich, wenn ich falsch liege), dass der Zweck von stringWithUTF8String aufgerufen wird, damit das Zeichen (ein c "Objekt") in einer Weise gelesen werden kann, die mit NSString (einem Ziel-c Objekt) übereinstimmt. Und ich glaube, dass Ints und Floats ein gemeinsames "Objekt" zwischen den beiden Sprachen sind, also muss keine Konvertierung auf diese Weise gemacht werden? Ich freue mich auf Ihre Antwort, danke :) – FarisZ
Oh! das ist was du meinst ... ich habe nicht aufgepasst und nur den gesehen, den du für 'name' eingestellt hast, was richtig aussieht. Die anderen, nein, du würdest nicht so untergehen. Alles, was sie wirklich brauchen, sind die grundlegenden C-Stil Deklarationen. (zB 'float price = 10.2;', oder 'int quantity = 5;'), aber da du sie in einer Kopfzeile deklarierst, nehme ich an, dass du nur 'price = 10.2; ',' quantity = 5; ', usw. –