3

私は自分のコードでこれを行っていますが、次のエラーが発生します:式は整数定数式ではありません

コード:

//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;
    }

}

なにが問題ですか?何が悪いのかわからない。ガイダンスが必要です...

4

3 に答える 3

16

If you want to use the switch, you should go for an enum, that will let you keep something readable while integers for the switch.

try this out :

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

then something like

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;
}

watch out, your case delete is written two times in your example, probably some copy paste mistake.

There is an objective c switch on github from Nicolas Bouilleaud that is made for strings (actually objects) : objcswitch

于 2013-03-02T14:41:34.807 に答える
4

switchステートメントでは、整数定数式をラベルとしてのみ使用できます。浮動小数点数、構造体、ポインター、オブジェクト、何もありません。整数定数だけです。平等に基づいて決定を下したい場合は、ネストステートメントNSStringを使用する必要があります。if-else

if ([sqlmethod isEqualToString:kInsertIntoDatabase]) {
    // do stuff
} else if ([sqlmethod isEqualToString:kDeleteFromDatabase]) {
    // etc.
}
于 2013-03-02T14:36:12.757 に答える
3

これらすべて

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

でありNSStringcase必要integerです、

あなたのコードはに変換されます

case @"Insert":

switch-caseこれは、ステートメントの構文/構文エラーです。

于 2013-03-02T14:35:20.977 に答える