Ios 在PerformSelect:WithObject中将枚举用作对象:

Ios 在PerformSelect:WithObject中将枚举用作对象:,ios,objective-c,enums,selector,typedef,Ios,Objective C,Enums,Selector,Typedef,我不理解代码中的某些行为。我在.m文件的顶部定义了一个枚举: typedef NS_ENUM (NSInteger, connectionState) { tryingToConnect, connecting, disconnecting }; 在我的代码后面,我调用该方法: [self performSelector:@selector(animateForState:) withObject:tryingToConnect afterDelay:1.5]; 这个很好用 但如果我用“连接

我不理解代码中的某些行为。我在.m文件的顶部定义了一个枚举:

typedef NS_ENUM (NSInteger, connectionState) {
tryingToConnect,
connecting,
disconnecting
};
在我的代码后面,我调用该方法:

[self performSelector:@selector(animateForState:) withObject:tryingToConnect afterDelay:1.5];
这个很好用

但如果我用“连接”或“断开连接”来称呼它:

Xcode警告我“ARC不允许将'NSInteger'(也称为'int')隐式转换为'id'。为什么在我的类型定义中,顶部的枚举变量(tryingToConnect)有效,而下面的变量(connecting/disconnecting)无效

为了包含所有内容,该方法的调用如下所示:

- (void)animateForState:(connectionState)state{

    switch (state) {
        case tryingToConnect:{

            NSLog(@"trying to connect");
            break;
        }
        case connecting:{

            NSLog(@"connecting");
            break;
        }

        case disconnecting:{

            NSLog(@"disconnecting");
            break;
        }

        default:
            break;
    }
}

这是因为第一个对象的值是0,这与传递nil相同。可以传递nil,但不能传递另一个基元。而是用object:@(connecting)传递NSNumber,然后打开状态。integerValue

它工作,因为第一个对象的值是0,这与传递nil相同。可以传递nil,但不能传递另一个基元。用object:@(connecting)传递NSNumber,然后打开状态。integerValue

Aaah我有一个诀窍,第一个值是0,但没有意识到它等同于传递nil。。。非常感谢@rdelmar现在一切正常!啊,我有一个诀窍,第一个值是0,但我没有意识到这相当于通过零。。。非常感谢@rdelmar现在一切正常!
- (void)animateForState:(connectionState)state{

    switch (state) {
        case tryingToConnect:{

            NSLog(@"trying to connect");
            break;
        }
        case connecting:{

            NSLog(@"connecting");
            break;
        }

        case disconnecting:{

            NSLog(@"disconnecting");
            break;
        }

        default:
            break;
    }
}