仅供参考:第1次)不是Obj-C开发者。 2)我能找到的关于无法识别的选择器的所有参考都涉及过度释放,参考问题,......但是这个库没有使用ARC ...
我通过FOUNDATION_EXPORT
函数将各种AppleScript结果返回到Mono / C#以及所有输入/输出参数,整数,数组,字符串等的编组。工作正常。
当我从executeAppleEvent
收到AppleScript失败时,NSDictionary包含多个条目,我将它们NSLog并通过以下方式将NSAppleScriptErrorBriefMessage
返回给调用者:
strncpy(scriptReturn, ([executionError[@"NSAppleScriptErrorBriefMessage"] UTF8String]), 254);
一切正常,但如果Applescript失败涉及缺少函数名称,则基于错误的NSDictionary 仅包含一个条目(相对于正常的四个错误键/名称对): / p>
{
NSAppleScriptErrorNumber = "-1708";
}
由于我没有NSAppleScriptErrorBriefMessage
返回,我试图返回错误号(作为字符串)并通过以下方式转换它:
strncpy(scriptReturn, ([executionError[@"NSAppleScriptErrorNumber"] UTF8String]), 254);
我得到NSInvalidArgumentException
'NSInvalidArgumentException', reason: '-[__NSCFNumber UTF8String]: unrecognized selector sent to instance
我有各种数字转换,NSString分配等等,但始终会收到“__NSCFNumber”相关错误。
如何将其转换为NSString(或?),以便我可以strlcpy
将错误号作为out参数缓冲区的字符串? (什么是__NSCFNumber
?)。
答案 0 :(得分:2)
根据错误,字典包含NSNumber
个对象,而不是NSString
。
我会做这样的事情以确保(这使得阅读和调试更容易):
NSNumber *number = executionError[@"NSAppleScriptErrorNumber"];
NSString *string = [number stringValue];
strcpy(scriptReturn, [string UTF8String]);