Во-первых, получаемое вами значение не является строковым объектом.Приведение его к NSString*
не «конвертирует» его, оно просто лежит на компиляторе.Причина, по которой он работает, заключается в том, что %@
запрашивает описание объекта, а объект AXValue
описывает себя так, как вы видите в выводе.
Чтобы декодировать значение, используйте код, подобный следующему:
CFRange range;
if (AXValueGetValue(textValue, kAXValueTypeCFRange, &range))
{
// use the range
}
else
/* the value isn't of the type that the attribute is supposed to have; abort */;
Если вы хотите изменить его:
range.location = /* some new value */;
AXValueRef newValue = AXValueCreate(kAXValueTypeCFRange, &range);
if (newValue)
{
AXError setError = AXUIElementSetAttributeValue(focussedElement, kAXSelectedTextRangeAttribute, newValue);
/* check setError and handle as appropriate */
CFRelease(newValue);
}
else
/* handle failure */;