Редактировать: это не работает. Я думал, что это так, но сейчас я получаю сбои, я не понимаю. Если я это выясню, я приду редактировать это больше. Вот что я написал раньше, что неправильно. Опять же, это не работает:
Я думаю, что нашел ответ на этот вопрос: Кодирование значения ключа.
С помощью Key-Value Coding я могу установить переменную экземпляра типа id,
а затем динамически идентифицировать фактическое содержимое переменной. я
может положить что-нибудь в него, даже int, и методы Key-Value
определить это для меня. Но что еще удивительнее, если я
получить содержимое переменной, используя Key-Value Coding, и
переменная оказывается int, кодирование значения ключа автоматически превращается
это в NSNumber для меня.
Я попытаюсь продемонстрировать.
Главное - установить операторы доступа для переменной I
хочу получить доступ. Итак, для этого примера, скажем, переменная
называется "IdentifMe."
//in the interface:
@property (copy) id accessIdentifyMe;
//in the implementation:
@synthesize accessIdentifyMe = identifyMe;
Теперь «identifMe» соответствует значениям ключа. Мы в порядке.
Все, что мне нужно сделать, это взять предметы из списка вариадик, передать их
в IdentifMe один за другим, и использовать методы Key-Value для определения
содержание. Вот так:
/*...assume all the following is happening inside a loop that
считает через
Вариационный список. Я назову список вариантов "variadicList".
Во-первых, я беру
текущий элемент переменной и поместите его в IdentifMe, объявив его
как тип
"Я бы"*/
identifMe = va_arg (variadicList, id);
/*Now I use a Key-Value method to check if identifyMe holds an
NSNumber. Если оно
содержит int, он будет автоматически возвращен как NSNumber,
вы помните, так
запрос для NSNumber функционально такой же, как запрос для
int.
Вне цикла я установил удобное логическое значение с именем foundANumber
в котором
сохранить результаты запроса: * /
foundANumber = [[self valueForKey: @ "identifMe"]
isKindOfClass: [NSNumber class]];
Это дало мне возможность отделить числа от объектов.
После этого я могу поместить объекты непосредственно в свой словарь и
поместите числа в NSNumber прежде, чем я поместу их в словарь.
И что это означает на другом конце, когда вызывается этот метод из
другой объект, это то, что я могу вызвать этот метод и поместить int в
список параметров и не беспокоиться о возникновении сбоя. Yay.
Вот причина, по которой это не работает: KVC не волшебство. Я думал, что у него есть какой-то супер особый способ определения типа переменной, но это не так. Он просто смотрит на тип, объявленный в методах доступа, и не может независимо проверить больше. Штопать.