Как вызвать и преобразовать int / NSNumber при вызове базы данных sqlite3 в Objective-C?

Заранее спасибо, что нашли время для чтения и надеетесь помочь мне. Я относительно новичок в кодировании и текущая проблема, с которой я сталкиваюсь;

Я построил базу данных 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.

Буду очень признателен за любую информацию и помощь по этому вопросу.

Спасибо!

1

Решение

Вы на правильном пути с тем, что вы упомянули для 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 довольно гибким.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]