2016-02-05 5 views
0

Я нахожусь в процессе приведения приложения IOS до настоящего времени - у него не было много внимания, так как прошивка 7.NSManagedObject номер Сравнение В противном случае

Я нахожу, что следующее сравнение:

[selectedFile valueForKey:@"canTransferToExternalApp"] == [NSNumber numberWithInt:1] 

возвращает false, когда значение, возвращаемое [selectedFile valueForKey:@"canTransferToExternalApp"], равно 1. В прошлом это возвращалось. Что изменилось?

+0

"selectedFile" - Словарь прав? – Vvk

+0

selectedFile - это NSManagedObject – daveywc

+0

- весь код в if() состоянии? – Vvk

ответ

0

Надеется, что это работало

[NSNumber numberWithInt:[selectedFile[@"canTransferToExternalApp"]]] isEqualToNumber [NSNumber numberWithInt:1] 

попробовать, используя то же Comparision либо как в int или NSString

если NSManagedObjects не сравнить значение непосредственно, то сначала преобразовать NSManagedObjects в NSDictionary ..... для примера:

NSArray *keys = [[[selectedFile entity] attributesByName] allKeys]; 
    NSDictionary *dict = [myObject dictionaryWithValuesForKeys:keys]; 

    [NSNumber numberWithInt:[dict[@"canTransferToExternalApp"]]] isEqualToNumber [NSNumber numberWithInt:1] 
+0

Преобразование NSManagedObject в словарь не помогло. – daveywc

2

Вам нужно избегать использования равных операторов для NSObjects, для ссылки кто-то отвечает на вопрос, связанный с сопоставлением.

https://stackoverflow.com/a/1319280/933887

Проблема здесь вы сравниваете адрес памяти, а не значения obejcts. Вы можете прочитать здесь о сравнении объектов: Introspection

В заключение, следующее было бы хорошим решением:

[[selectedFile valueForKey:@"canTransferToExternalApp"] isEqual:[NSNumber numberWithInt:1]] 

Вы можете использовать isEqualToNumber:, но вы должны убедиться, что вы сравниваете NSNumbers и не что-либо остальное. Поэтому, чтобы быть в безопасности, я рекомендую придерживаться isEqual:

+0

ОК - так, что работает. Но почему он работал в прошлом и теперь нарушен? У меня, вероятно, есть много кода, как это - если это неправильно - достаточно справедливо, - но почему он когда-либо работал? – daveywc

+0

Это кажется безупречным для меня при использовании положительных результатов, но при использовании отрицательных чисел оно имеет тенденцию терпеть неудачу. В любом случае кажется, что лучше использовать более эффективный подход к использованию функции сравнения при взаимодействии с объектами. – CStreel