Импорт нескольких записей из sqlite db iphone sdk - PullRequest
0 голосов
/ 02 марта 2010

Мне нужна помощь! Пожалуйста. Я пытаюсь разработать очень очень простое приложение, в основном, просто для чтения книг. В идеале, первое представление должно быть представлением uitable, перечисляющим имена глав, затем выбор строки приведет вас к подробному представлению с разделом, разделенным на сегменты. Обратите внимание, что сегменты на самом деле являются их собственными записями внутри таблицы. Поэтому я пытаюсь заполнить представление uitext несколькими записями из таблицы БД. В процессе получения всех моих данных из этой базы данных я просто запутался. Я искал в Интернете несколько уроков и нашел очень полезный здесь . Я прошел через это шаг за шагом, и это имело смысл, все это имело смысл. Но вместо того, чтобы использовать предоставленную им базу данных, я хотел попробовать вставить свою собственную базу данных, в которой есть все содержимое, которое я хотел бы видеть, и оно не будет работать. Это выдает приятную *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** +[NSString stringWithUTF8String:]: NULL cString' ошибку, которую я не могу понять. Это звучит знакомо или имеет смысл для кого-либо? Код для метода readFromDB:

-(void) readTextFromDatabase {
// Setup the database object
sqlite3 *database;

// Init the animals Array
textAr = [[NSMutableArray alloc] init];

// Open the database from the users filessytem
if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) {
    // Setup the SQL Statement and compile it for faster access
    const char *sqlStatement = "select * from books";//This is where I'm running into trouble
    sqlite3_stmt *compiledStatement;
    if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) {
        // Loop through the results and add them to the feeds array
        while(sqlite3_step(compiledStatement) == SQLITE_ROW) {
            // Read the data from the result row
            NSString *aChapter = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 1)];
            NSString *aSection = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 2)];


            // Create a new text object with the data from the database
            Text *text = [[Text alloc] initWithChapter:aChapter Section:aSection];

            // Add the text object to the text Array
            [textAr addObject:text];

            [text release];
        }
    }
    // Release the compiled statement from memory
    sqlite3_finalize(compiledStatement);

}
sqlite3_close(database);

Помимо переключения имен некоторых переменных, я не изменил ни одной части этого кода, за исключением того места, которое я упомянул, вероятно, вызывает некоторые проблемы. Я изменил выражение «выбрать * из животных» на «выбрать * из книг», где животные - это имя старой таблицы, а книги - это имя таблицы в новой БД, которую я хотел бы использовать. Я думал, что это не будет слишком большой сделкой, но, видимо, это так. Я признаю, что это не очень аккуратный вопрос, но если есть кто-нибудь, кто мог бы помочь мне через эту стену, с которой я сталкиваюсь, это было бы очень ценно. Спасибо !!!

1 Ответ

1 голос
/ 02 марта 2010

Я столкнулся с той же проблемой при использовании sqlite, я не могу точно вспомнить, когда появлялись нулевые строки (возможно, из значений NULL в строке), но я использовал этот код, чтобы обойти проблему:

+ (NSString*)stringWithCharsIfNotNull: (char*)chars
{
    if ( chars == NULL )
        return nil;
    else
        return [[NSString stringWithUTF8String: chars] 
                stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...