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

时间:2015-12-03 04:43:31

标签: objective-c

仅供参考:第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?)。

1 个答案:

答案 0 :(得分:2)

根据错误,字典包含NSNumber个对象,而不是NSString

我会做这样的事情以确保(这使得阅读和调试更容易):

NSNumber *number = executionError[@"NSAppleScriptErrorNumber"];
NSString *string = [number stringValue];
strcpy(scriptReturn, [string UTF8String]);