表达式不是iOS中的整数常量表达式

时间:2013-03-02 14:33:29

标签: ios objective-c

我在我的代码中这样做,它给了我这个错误:表达式不是整数常量表达式

代码:

//Tag for Database
#define kInsertIntoDatabase            @"Insert"
#define kDeleteFromDatabase            @"Delete"
#define kUpdateIntoDatabase            @"Update"
#define kQueryDatabase                 @"Query"


-(void)documentIsReady:(NSString *)sqlmethod{
    if(document.documentState == UIDocumentStateNormal)
    {
        context = document.managedObjectContext;
    }

    switch (sqlmethod) {
        case kInsertIntoDatabase:
            [self insertCoreDataModel];
            break;
        case kDeleteFromDatabase:
            [self deleteCoreDataModel];
            break;
        case kUpdateIntoDatabase:
            [self updateCoreDataModel];
            break;
        case kDeleteFromDatabase:
            [self deleteCoreDataModel];
            break;
        default:
            break;
    }

}

有什么问题?不确定有什么问题。需要一些指导...

3 个答案:

答案 0 :(得分:16)

如果你想使用这个开关,你应该选择一个enum,它可以让你在切换整数时保持可读性。

试试这个:

typedef enum {
    DatabaseMainFunctions_InsertIntoDatabase,
    DatabaseMainFunctions_DeleteFromDatabase,
    DatabaseMainFunctions_UpdateInto,
    DatabaseMainFunctions_Query
}DatabaseMainFunctions;

然后像

switch (sqlmethod) {
    case DatabaseMainFunctions_InsertIntoDatabase:
        [self insertCoreDataModel];
        break;
    case DatabaseMainFunctions_DeleteFromDatabase:
        [self deleteCoreDataModel];
        break;
    case DatabaseMainFunctions_UpdateInto:
        [self updateCoreDataModel];
        break;
    case DatabaseMainFunctions_Query:
        [self deleteCoreDataModel];
        break;
    default:
        break;
}

注意,您的案例删除在您的示例中写了两次,可能是一些复制粘贴错误。

来自Nicolas Bouilleaud的github 目标c开关为字符串(实际上是对象):objcswitch

答案 1 :(得分:4)

在switch语句中,您只能使用整数常量表达式作为标签。没有浮点数,没有结构,没有指针,没有对象,没有。只是整数常量。如果您想根据NSString相等性做出决策,则需要使用嵌套if-else语句:

if ([sqlmethod isEqualToString:kInsertIntoDatabase]) {
    // do stuff
} else if ([sqlmethod isEqualToString:kDeleteFromDatabase]) {
    // etc.
}

答案 2 :(得分:3)

所有这些

#define kInsertIntoDatabase            @"Insert"
#define kDeleteFromDatabase            @"Delete"
#define kUpdateIntoDatabase            @"Update"
#define kQueryDatabase                 @"Query"

NSStringcase需要integer

您的代码已转换为

case @"Insert":

这是switch-case语句的语法/语法错误。