[__NSCFNumber UTF8String]:无法识别的选择器/将NSCFNNumber转换为字符串



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]);

最新更新