reference documentation for the class NSUniqueIdentifier声称在以下方案中评估了唯一ID说明符:
如果容器实现的方法的选择器与脚本建立的相关
valueIn<Key>WithUniqueID:
模式匹配 键值编码,调用该方法。这种方法可能 非常快,实施起来可能比较容易。与评估任何脚本对象说明符的情况一样,指定对象的容器有机会评估 对象说明符。如果容器类实现了
indicesOfObjectsByEvaluatingObjectSpecifier:
方法,方法是 调用。这种方法可能非常快,但确实如此 相对难以实施。- 醇>
一个
NSWhoseSpecifier
对象,用于指定第一个与其相关的ID&#39;属性匹配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)。