我有一个执行多个网络操作的项目。为了便于控制,我给每个操作一个唯一的 ID,定义为 NSNumber,因为我必须对对象和数组执行操作,这样更容易:
#define LOGIN_OPERATION [NSNumber numberWithInt:0]
#define REGISTER_USER_OPERATION [NSNumber numberWithInt:1]
#define VERIFY_USER_OPERATION [NSNumber numberWithInt:2]
#define REGISTER_USER_DATA_OPERATION [NSNumber numberWithInt:3]
#define FORGOT_PASSWORD_OPERATION [NSNumber numberWithInt:4]
#define PASSTIME_REGISTER_OPERATION [NSNumber numberWithInt:5]
#define PASSTIME_VERIFY_TOKEN_OPERATION [NSNumber numberWithInt:6]
#define PASSTIME_OPERATION [NSNumber numberWithInt:7]
#define SERVICES_OPERATION [NSNumber numberWithInt:8]
#define MAIL_SUPPORT_OPERATION [NSNumber numberWithInt:9]
#define UPDATE_USER_INFO_OPERATION [NSNumber numberWithInt:10]
#define OBTAIN_CACS_OPERATION [NSNumber numberWithInt:11]
#define GET_PREPAID_BALANCE_OPERATION [NSNumber numberWithInt:12]
#define UPDATE_SERVICES_OPERATION [NSNumber numberWithInt:13]
然后我只是在我的项目说明中使用了以下内容,这在去年效果很好。
- (void) processNetworkResponseForOperation: (NSNumber*) opId {
if (opId == SERVICES_OPERATION) {
//do something
} else if (opId == UPDATE_SERVICES_OPERATION) {
//do something
}
}
但是今天我添加了最后一个操作(数字 13)并且所有 == 操作结果为假,只是那个数字!,我使用调试器来确保该值是好的,但我只能让条件为真,如果我使用:[opId isEqualToNumber: UPDATE_SERVICES_OPERATION]这很长。
我知道 NSNumber 是一个对象,因此 == 可能不是最好的选择,但为什么它可以与项目中的所有其他操作一起使用,但 #13 却不起作用?
任何帮助将不胜感激。
编辑 好吧,我尝试了更大的数字,但我遇到了同样的问题,但是例如,如果我将 UPDATE_SERVICES_OPERATION 数字与另一个操作号切换,它现在会执行 UPDATE_SERVICES_OPERATION 但它不会执行我切换数字的操作。那么为什么它不适用于较新的数字:S,或者它只是 xcode 上的构建问题?(我将重新启动并更新)