Заранее спасибо, что нашли время для чтения и надеетесь помочь мне. Я относительно новичок в кодировании и текущая проблема, с которой я сталкиваюсь;
Я построил базу данных sqlite3 с тремя столбцами, которые соответственно хранятся как; строка, плавать и int. При попытке чтения и представления столбцов у меня возникают проблемы с поиском метода для представления значений типа float и int.
Три свойства, которые хранятся в базе данных, задаются как;
@property (nonatomic, strong) NSString *name;
@property (nonaomtic, strong) NSNumber *price;
@property (nonaomtic, strong) NSNumber *quantity;
Я не уверен, что, возможно, изменение последних двух свойств на float и int будет иметь значение?
Однако главная путаница для меня заключается в следующем коде, который я сделал для вызова базы данных;
-(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);
}
Мой здравый смысл подсказывает мне, что проблема заключается в этом разделе;
NSString *name = [NSString stringWithUTF8String:n];
NSNumber *price = [NSString stringWithUTF8String:p];
NSNumber *quantity = [NSString stringWithUTF8String:q];
Я не уверен, как я должен подойти к NSNumber? Я знаю, что строка NSString stringWithUTF8String неверна, но я не знаю эквивалента для NSNumber.
Буду очень признателен за любую информацию и помощь по этому вопросу.
Спасибо!
Вы на правильном пути с тем, что вы упомянули для float
а также int
, Float
не нужно ссылаться как NSString
потому что его размер не меняется между 32-битными и 64-битными системами. Если ваше целое число больше, я бы рекомендовал использовать NSInteger
для этого значения:
char *n = sqlite3_column_text(compiledStatement, 1);
float p = sqlite3_column_text(compiledStatement, 2);
int q = sqlite3_column_text(compiledStatement, 3);
NSString *name = [NSString stringWithUTF8String:n];
float price = p;
NSInteger quantity = q;
Примечание: вы не *
для значений типа float или int, поскольку они не являются указателями.
Вы можете даже сделать это (если вы уже объявили свойства в своем заголовке):
name = [NSString stringWithUTF8String:sqlite3_column_text(compiledStatement, 1)];
price = sqlite3_column_text(compiledStatement, 2);
quantity = sqlite3_column_text(compiledStatement, 3);
Чтобы проверить значения вы можете использовать NSLog
:
NSLog(@"%@ %.02f %li", name, price, quantity);
Ради полноты, если вы хотите сделать float
а также int
в NSNumber
:
NSString *name = [NSString stringWithUTF8String:n];
NSNumber *price = [NSNumber numberWithFloat:p];
NSNumber *quantity = [NSNumber numberWithInt:q];
Со свойствами в вашем заголовке объявлено:
name = [NSString stringWithUTF8String:n];
value = [NSNumber numberWithFloat:p];
quantity = [NSNumber numberWithInt:q];
NSLog(@"%@ %@.02f %@", name, price, quantity);
Есть несколько способов получить ваш результат, и это делает Objective-C довольно гибким.
Других решений пока нет …