通过第一篇AXUIElement传送门的基本调用和第二篇的AXObserver传送门的监听,已经基本完成了Accessibility API的使用情况了。但如果想使得我们的代码更加健壮,那就必须做更多的错误和异常处理。而刚好Accessibility API的函数,基本上都会返回一个AXError,来让我们进行判断调用情况和进行异常的处理
AXError
首先我们看看AXError是什么东东?同样的,具体可以查阅AXError.h
其实AXError是一个枚举,并且是一个Int32.那他有哪些值呢?
success: 它的RawValue为0。它代表着API调用成功,但并不代表获取的值一定是有值的,这个需要注意。所以在判断的时候,需要进行双重判断。即要判断AXError是否成功,同时还要判断value是有值:
var value : AnyObject?
let axError:AXError = AXUIElementCopyAttributeValue(applicationRef!, kAXWindowsAttribute as CFString, &value)
if axError == .success{//这里判断是否调用成功
if let windows = value as? [AXUIElement]{//这里判断获取的value是否有值,即非空
print("all windows \(windows)")
}
}
- failure: 它的
RawValue为-25200。系统异常,由系统抛出的错误。如分配内存给对象的时候,出现的失败。 - illegalArgument: 它的
RawValue为-25200。传了一个非法的值去某个Accessibility API的函数。 - invalidUIElement: 它的
RawValue为-25202。API函数不支持该AXUIElement。 - invalidUIElementObserver: 它的
RawValue为-25203。 API函数不支持和不接受该AXObserver。 - cannotComplete: 它的
RawValue为-25204。函数无法完成,一般情况下是出现在程序处于无响应或者繁忙中。 - attributeUnsupported 它的
RawValue为-25205。就是该AXUIElement不支持该attribute。 - actionUnsupported 它的
RawValue为-25206. 就是该AXUIElement不支持该action。 - notificationUnsupported 它的
RawValue为-25207. 就是该AXUIElement不支持该notification。 - notImplemented 它的
RawValue为--25208. 表示方法或者函数没有声明或者实现。一般情形下出现在程序未被允许使用Accessibility API - notificationAlreadyRegistered 它的
RawValue为-25209. 就是该notification已经存在了。一般出现在重复添加相同key的通知 - notificationNotRegistered 它的
RawValue为-25210. 用于判断该notification是否已经注册了。 - apiDisabled 它的
RawValue为-25211. 这个就很直白了,就是未被允许使用Accessibility API。需要在System Preference -> Security & Privacy -> Accseeibility里面添加。 - noValue: 它的
RawValue为-25212. 代表着请求的Value不存在。 - parameterizedAttributeUnsupported: 它的
RawValue为-25213. 就是该AXUIElement不允许使用parameterizedAPI函数 - notEnoughPrecision: 它的
RawValue为-25214. 不精准。这个作者暂时也没遇到过