Obj-C抱怨字段是"表达结果未使用"

时间:2012-04-19 00:16:05

标签: objective-c sqlite fmdb

我正在尝试使用此代码执行FMDB插入:

dbCmd = @"INSERT INTO SiteData (SITE_ID, INITIAL_STA, ELEV, SITE_DESC, LOOP_COUNT, DATE) VALUES(?,?,?,?,?,?)",
txtSiteID.text, 
[txtSTA.text floatValue],
[txtElev.text floatValue],
txtSiteDesc.text, 
[NSNumber numberWithInt:0], 
currentDate;

未通过“浮点值”方法调用修改的3个文本字段中的每一个都收到错误消息: “表达结果未使用”导致参数计数关闭,从而导致FMDB崩溃。

我没有看到代码写的任何问题......有人可以告诉我需要改变什么才能让它工作吗?

3 个答案:

答案 0 :(得分:4)

我觉得你非常困惑。代码

dbCmd = @"INSERT INTO SiteData (SITE_ID, INITIAL_STA, ELEV, SITE_DESC, LOOP_COUNT, DATE) VALUES(?,?,?,?,?,?)",
txtSiteID.text, 
[txtSTA.text floatValue],
[txtElev.text floatValue],
txtSiteDesc.text, 
[NSNumber numberWithInt:0], 
currentDate;

不会像您想象的那样使用占位符创建语句。它正在运行由comma operator分隔的一大堆表达式。变量dbCmdcurrentDate的值结束,并且丢弃所有其他表达式的值。编译器警告您正在编写未使用的表达式。

我认为您需要做的事情就像

[db executeUpdate:@"INSERT INTO SiteData (SITE_ID, INITIAL_STA, ELEV, SITE_DESC, LOOP_COUNT, DATE) VALUES(?,?,?,?,?,?)",
    txtSiteID.text, 
    [txtSTA.text floatValue],
    [txtElev.text floatValue],
    txtSiteDesc.text, 
    [NSNumber numberWithInt:0], 
    currentDate];

答案 1 :(得分:0)

dbCmd是什么类型的对象?如果是字符串,则需要使用[NSString stringWithFormat:]和正确的字符串百分比编码。您不能只关注NSString常量(@"")上的参数。

编辑:见凯文的答案。

答案 2 :(得分:0)

以下是答案:

dbCmd = [NSString stringWithFormat: @"INSERT INTO SiteData (SITE_ID, INITIAL_STA, ELEV, SITE_DESC, LOOP_COUNT, DATE) VALUES(%@, %f, %f, %@, %d, %@)",
    txtSiteID.text,
    [txtSTA.text floatValue],
    [txtElev.text floatValue],
    txtSiteDesc.text, 
    [NSNumber numberWithInt:0], 
    currentDate];

像冠军一样工作!感谢大家的投入。我很感激!