2016-02-09 2 views
0

Я получаю сообщение об ошибке, которое я не могу трясти. Когда я пытаюсь получить доступ к свойству id <NSObject, NSCoding> с valueForKey, код подходит для параметра функции, item, но не для аналогичного id Я извлекаю из массива. Почему это?Неизвестный метод экземпляра для selector 'valueForKey:' для объекта id <NSObject, NSCoding>

- (void) insertItem:(id<NSCoding, NSObject >) item { 
      for (int i = 0; i < [self.sortDescriptors count]; i++) { 
       NSString *propertyString = self.sortDescriptors[i].key; 
       int idx = 0; 
       id<NSCoding, NSObject > comparisonItem = self.items[idx]; 
       while ([[item valueForKey: propertyString] compare:[comparisonItem valueForKey: propertyString]] == NSOrderedAscending) { 
        .... 

Именно этот вызов:

[comparisonItem valueForKey: propertyString] 

Это производит эту ошибку:

No known instance method for selector 'valueForKey:' 

Что мне не хватает, и как я могу сделать сравнение для динамического именованного свойства?

+0

Каков фактический тип данных объекта, на который указывает 'item', когда вы получаете ошибку? – rmaddy

ответ

0

Вместо id<NSCoding, NSObject > введите это значение как NSObject*.

+0

Вы абсолютно правы. Значит ли это, что протокол NSObject не совпадает с наследованием от NSObject? Это подмножество селекторов? – sunny

+0

'valueForKey:' не является частью протокола NSObject. Он является частью класса NSObject. – matt

+0

@sunny 'NSObject' является стандартным базовым классом ObjC. Реализация протокола NSObject позволяет вашему пользовательскому базовому классу действовать как NSObject. – SevenBits

Смежные вопросы