Как читать NSDate из Sqlite.Синтаксис белого пятна. - PullRequest
0 голосов
/ 28 января 2012

Я сохраняю NSDate в sqlite (формат DATE), автоматически вставляя дату (), когда происходит новое обновление.В моем объектном классе у меня есть поле (NSString *) для хранения этого значения.В dbAccess (класс для хранения всех методов запроса sqlite) я читаю из базы данных и заполняю объект данными из таблицы.

Итак, моя проблема - синтаксис.Как это исправить?

Метод, который считывает данные из таблицы и заполняет ими объект

...
while (sqlite3_step(statement) == SQLITE_ROW)
{
    Item *item=[[Item alloc]init];
    NSDate *dated=(NSDate*)sqlite3_column_text(statement, 8);

    //Converting date NSDate to NSString
    NSDateFormatter *df = [[NSDateFormatter alloc]init];
        [df setDateFormat:@"yyyy-mm-dd"];
        NSString *date =[NSString stringWithFormat:@"%@",[df stringFromDate:dated]];

    //Trying to input the date into object. The receiving (dated)var is NSString
    item.dated=(date)?[NSString stringWithUTF8String:date]:@"";

    [item release];
}

Наконец получено предупреждение "Несовместимые типы указателей, отправляющие NSString в указатель параметра" const char ".

Как устранить эту проблему синтаксиса.

Заранее спасибо.

1 Ответ

2 голосов
/ 04 мая 2013

ОК, это оказалось очень простым решением. Предполагая, что ваши даты в SQLite хранятся как типы данных Date, вы можете запросить их как строки, а затем использовать NSDateFormatter для преобразования в NSDate, например так:

...
const char *sqlStatement = "SELECT ColumnA, ColumnB, ColumnC, strftime('%Y-%m-%d', CreationDate), strftime('%Y-%m-%d', ModificationDate) FROM MyTable";
sqlite3_stmt *compiledStatement;
if (sqlite3_prepare_v2(db, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) {
    // Loop through the results
    while (sqlite3_step(compiledStatement) == SQLITE_ROW) {
        NSString *creationDateText = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 3)];
        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
        [dateFormatter setDateFormat: @"yyyy-MM-dd"];
        NSDate *creationDate = [dateFormatter dateFromString:creationDateText];
        // Repeat for ModificationDate
        ...
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...