【问题标题】:Xcode - NSInvalidArgumentException', reason: '*** +[NSString stringWithUTF8String:]: NULL cString'Xcode - NSInvalidArgumentException',原因:'*** +[NSString stringWithUTF8String:]: NULL cString'
【发布时间】:2017-09-20 14:52:24
【问题描述】:

我有下面的代码,应该用我的 sqlite 文件中的信息填充 TableViewController,它让我可以很好地添加,我可以查看文件并且信息在那里,但是我收到了上面的错误消息,并且失败了很难修复它....

-(NSMutableArray *) stockList
{

NSString *filePath = [self getWritableDBPath];

if(sqlite3_open([filePath UTF8String], &db) == SQLITE_OK)
{

    const char *sql = "Select Description, Quantity from StockTable";
    sqlite3_stmt *sqlStatement;
    if(sqlite3_prepare(db, sql, -1, &sqlStatement, NULL) != SQLITE_OK)
    {
        NSLog(@"Problem with query: %s", sqlite3_errmsg(db));
    }
    else
    {
        while (sqlite3_step(sqlStatement)==SQLITE_ROW)
        {
            Stock * stock = [[Stock alloc] init];

            stock.desc = [NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStatement,     1)];
            stock.qty = [NSString stringWithUTF8String:(char *)     sqlite3_column_text(sqlStatement, 2)];

            [thestock addObject:stock];
            stock = nil;
        }
    }
    sqlite3_finalize(sqlStatement);
}
sqlite3_close(db);
return thestock;
}

感谢您的帮助,目前我自己正在谷歌搜索..

如下所述的连接字符串:(原因是它会导致 LINK 错误并指出 MyDB 在两个视图中都是重复的)

表格视图:

NSString * MyDB2=@"StockDatabase.db";

添加视图:

NSString * MyDB=@"StockDatabase.db";

【问题讨论】:

    标签: objective-c xcode5


    【解决方案1】:

    您从数据库中获取的一个(或两个)列是NULL

    stock.desc = [NSString stringWithUTF8String:(char *)sqlite3_column_text(sqlStatement, 1)];
    stock.qty = [NSString stringWithUTF8String:(char *)sqlite3_column_text(sqlStatement, 2)];
    

    通过以下方式防范:

    const char *desc = sqlite3_column_text(sqlStatement, 1);
    if (desc)
        stock.desk = @(desc);
    const char *qty = sqlite3_column_text(sqlStatement, 2);
    if (qty)
        stock.qty = @(qty);
    

    【讨论】:

    • 它停止崩溃但什么都没有填充,这很可能意味着它制作了数据库的副本并且看不到您认为的数据吗?我在两个视图中都有连接,一个名为 MyDB,另一个名为 MyDB2... 都引用 @"StockDatabase.db"
    • @user2959978 我不确定,但是你问了一个我相信我已经回答的具体问题。如果您还有其他问题,则必须针对该问题提出另一个问题。
    • 你阻止它崩溃是的,所以谢谢你,当它允许我时会发布另一个......
    【解决方案2】:

    我也遇到了这个错误。我如何解决它是将第一列文本索引设置为“0”而不是“1”。错误消失了。

    char *charPrice = (char*) sqlite3_column_text(stmt, 0);
    NSString *price = [NSString stringWithUTF8String:charPrice];
    
    char *charName = (char*) sqlite3_column_text(stmt, 1);
    NSString *name = [NSString stringWithUTF8String:charName];
    

    【讨论】:

      猜你喜欢
      • 2011-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多