Возврат NSUniqueIDSpecifier в -objectSpecifier с ключом Key не приводит к значению In<Key>WithUniqueID: получение оценки

В справочной документации по классу NSUniqueIdentifier утверждается, что спецификаторы уникальных идентификаторов оцениваются по следующей схеме:

  1. Если контейнер реализует метод, чей селектор совпадает с соответствующим valueIn<Key>WithUniqueID: шаблон, созданный с помощью скриптов кодирования значения ключа, метод вызывается. Этот метод потенциально может быть очень быстрым, и его можно относительно легко реализовать.

  2. Как и в случае оценки любого спецификатора объекта сценария, контейнеру указанного объекта предоставляется возможность оценить спецификатор объекта. Если класс контейнера реализует indicesOfObjectsByEvaluatingObjectSpecifier: метод, метод вызывается. Этот метод потенциально может быть очень быстрым, но его относительно сложно реализовать.

  3. 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).

0 ответов

Другие вопросы по тегам