我需要一些帮助!请。我正在尝试开发一个非常简单的应用程序,基本上只是一个简单的书籍阅读器。理想情况下,第一个视图将是一个列出章节名称的uitableview,然后选择该行会将您带到一个详细视图,该视图具有分成段的章节。请注意,段实际上是表中的记录。所以我试图用db表中的多个记录填充uitext视图。从这个数据库中获取所有数据的过程就是我搞砸了所有数据的过程。我在网上搜索了一些教程,我找到了一个非常有用的here。我一步一步地完成了它,这是有道理的,这一切都是有道理的。但是我没有使用他提供的数据库,而是想尝试插入我自己的数据库,它拥有所有内容,我想要查看它,它不会工作。它抛出一个很好的*** 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);
除了切换某些变量的名称外,我没有更改该代码的任何部分,除了我提到的地方可能会导致一些问题。我将“select * from animals”语句更改为“select * from books”,其中animals是旧表的名称,books是我想要使用的新db中的表的名称。我认为这不会太大,但显然确实如此。我认识到这不是一个非常整洁的问题,但如果有任何人可以帮助我超越我面临的这面墙,我将不胜感激。感谢!!!
答案 0 :(得分:1)
我在使用sqlite时遇到了同样的问题,我无法回想起空字符串何时出现(可能来自行中的NULL值),但我使用此代码来解决问题:
+ (NSString*)stringWithCharsIfNotNull: (char*)chars
{
if ( chars == NULL )
return nil;
else
return [[NSString stringWithUTF8String: chars]
stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]];
}