FYI:1st)不是Obj-C开发人员。2nd)我能找到的关于未识别选择器的所有引用都涉及过度发布、引用问题。。。但是这个库没有使用ARC…
我通过FOUNDATION_EXPORT
函数将各种AppleScript结果返回到Mono/C#,所有输入/输出参数、int、数组、字符串等的封送处理都很好。
当我从executeAppleEvent
得到AppleScript失败时,NSDictionary包含多个条目,我将它们记录下来,并通过仅向调用方返回NSAppleScriptErrorBriefMessage
strncpy(scriptReturn, ([executionError[@"NSAppleScriptErrorBriefMessage"] UTF8String]), 254);
这一切都很好,但如果Applescript失败与缺少函数名有关,则基于错误的NSDictionary仅包含一个条目(与正常的四个错误键/名称对相比):
{
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
?)。
根据错误,字典包含NSNumber
对象,而不是NSString
。
我会做这样的事情来确定(这使它更容易阅读和调试):
NSNumber *number = executionError[@"NSAppleScriptErrorNumber"];
NSString *string = [number stringValue];
strcpy(scriptReturn, [string UTF8String]);