У меня есть проект, который выполняет несколько сетевых операций. Для удобства управления я дал каждой операции уникальный идентификатор, определяемый как NSNumber, потому что я должен выполнять операции с объектами и массивом и проще этот путь:Iphone sdk - странное поведение при сравнении 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) и все операции == результата ложно, только с этим номером !, я использовал отладчик, чтобы гарантировать, что значение нормально, но я могу только получите условие true, если я использую: [opId isEqualToNumber: UPDATE_SERVICES_OPERATION], который довольно длинный.
Я понимаю, что NSNumber является объектом, и, следовательно, == может быть не лучшим выбором, но почему он работает со всеми другими операциями между проектом, но с # 13 не работает?
Любая помощь будет оценена по достоинству.
Редактировать Ну я пытался с большими числами и у меня такая же проблема, но, например, если я включаю номер theUPDATE_SERVICES_OPERATION с другим номером оп, теперь он делает UPDATE_SERVICES_OPERATION, но он не будет делать операцию, которую я переключил номер , Итак, почему он не работает с новыми номерами: S, или это просто проблема сборки на xcode? (я перезагружаюсь и обновляюсь)
Согласен, вот как это должно быть сделано. Но для меня вопрос все еще открыт ... почему меняется поведение? Я попытался выяснить это сам, но еще не понял. –
@ C4 - Трэвис, если вы прочтете ответ на этот вопрос http://stackoverflow.com/questions/5054730/comparing-objects-in-obj-c, вы увидите, что в коде, который оп размещен, сравнивается адрес памяти объекты. Есть много причин, по которым другие ценности могут работать, в то время как последнее не имеет значения, но шансы на то, что все это непоследовательно. Нам понадобится вся база кода для дальнейшего анализа. –
круто, спасибо dave –