Возврат NSUniqueIDSpecifier в -objectSpecifier с ключом Key не приводит к значению In<Key>WithUniqueID: получение оценки
В справочной документации по классу NSUniqueIdentifier утверждается, что спецификаторы уникальных идентификаторов оцениваются по следующей схеме:
Если контейнер реализует метод, чей селектор совпадает с соответствующим
valueIn<Key>WithUniqueID:
шаблон, созданный с помощью скриптов кодирования значения ключа, метод вызывается. Этот метод потенциально может быть очень быстрым, и его можно относительно легко реализовать.Как и в случае оценки любого спецификатора объекта сценария, контейнеру указанного объекта предоставляется возможность оценить спецификатор объекта. Если класс контейнера реализует
indicesOfObjectsByEvaluatingObjectSpecifier:
метод, метод вызывается. Этот метод потенциально может быть очень быстрым, но его относительно сложно реализовать.
NSWhoseSpecifier
объект, который определяет первый объект, чей соответствующий атрибут 'ID ' совпадает с идентификатором, синтезируется и оценивается.NSWhoseSpecifier
Объект должен искать все ключевые элементы в контейнере в поисках совпадения. Поиск потенциально очень медленный.
Однако я не вижу valueIn<Key>WithUniqueID:
получать вызов. Чтобы дать вам пример, у меня есть класс, где я описываю спецификатор объекта следующим образом:
- (NSScriptObjectSpecifier *)objectSpecifier
{
assert(self.documentID);
assert(self.controller);
NSScriptObjectSpecifier *containerRef = self.controller.objectSpecifier;
assert(containerRef);
assert(containerRef.keyClassDescription);
return [[NSUniqueIDSpecifier alloc] initWithContainerClassDescription:containerRef.keyClassDescription
containerSpecifier:containerRef
key:@"allObjects"
uniqueID:self.documentID];
}
Метод, который я определил в классе контейнера: - (id)valueInAllObjectsWithUniqueID:(NSString *)uniqueID
метод, который я определил:
- (id)valueInAllObjectsWithUniqueID:(NSString *)uniqueID {
return [self objectWithIdentifier:uniqueID];
}
В классе, соответствующем контейнеру, я также переопределил -respondsToSelector:
для дальнейшей отладки и обратите внимание, что единственный соответствующий метод, который запрашивает система сценариев, indicesOfObjectsByEvaluatingObjectSpecifier:
сразу после -objectSpecifier
Выше вызывается (и подтверждается, что он возвращает ненулевой результат с описанием класса контейнера и спецификатором контейнера, совместимым с вызовами метода получения класса контейнера сразу после оценки спецификатора объекта).
Есть идеи? Это на OSX Mavericks (10.9.4).