Я недавно представил отчет об ошибке Apple, но я подумал, что я буду задавать вопрос в любом случае, если я пропущу что-то очевидное. В Objective-C, следующий вызов прекрасно работает на 64-битной системы, но бросает NSInvalidArgumentException на 32-битной системе:Почему setValue: forKey: сбой в 32-битной системе, но не 64-битный?
[self setValue:@"true" forKey:@"flag"];
Свойство "флаг" является BOOL:
@property BOOL flag;
Кроме того, вызов отлично работает в Swift/32-бит, где свойство является Bool:
var flag: Bool = false
Аналогичным образом, этот вызов отлично работает в Swift на 64-битной системе, но бросает NSInvalidArgumentException на 32-битной системе ("Inde х»является Int):
setValue("2", forKey: "index")
Но она отлично работает в Objective-C/32-бит, где свойство является NSInteger.
Я бы ожидал, что эти вызовы будут работать корректно независимо от языка или архитектуры процессора. Кто-нибудь знает, почему они не могут?
Код, который вы отправили, не использует 'BOOL' на всех, кроме двух строк. Код, который вы отправили, не будет вызывать ошибки при описании. – rmaddy
Можете ли вы привести еще несколько примеров кода, где он работает и не работает? Как указывает @rmaddy, ваш код ничего не показывает о BOOL. – brandonscript
Свойство «flag» определяется как BOOL. Вы не знакомы с KVC? –