C++ NSSLocale标识符导致运行时堆栈崩溃
我发布了一个早期版本,以从用户首选项设置中获取最新的区域设置标识符。 这是我得到的答案C++ NSSLocale标识符导致运行时堆栈崩溃,c++,macos,objective-c++,foundation,core-foundation,C++,Macos,Objective C++,Foundation,Core Foundation,我发布了一个早期版本,以从用户首选项设置中获取最新的区域设置标识符。 这是我得到的答案 #include <Foundation/Foundation.h> std::string get_user_locale() { NSLocale* locale = [NSLocale autoupdatingCurrentLocale]; return std::string([[locale localeIdentifier] UTF8
#include <Foundation/Foundation.h>
std::string get_user_locale()
{
NSLocale* locale = [NSLocale autoupdatingCurrentLocale];
return std::string([[locale localeIdentifier] UTF8String]);
}
int main()
{
std::cout << "Locale is " << get_user_locale() << std::endl;
return 0;
}
我在这里遗漏了什么吗?请显示链接命令。我想确保正在链接
Foundation
框架。@不幸的是,我无法发布link命令,因为它包含大量与IP相关的工件。但我检查并确认,Foundation
确实正在链接。请将该源文件拆分为单个文件,并将其从您的产品中构建和链接,看看是否有效。当它工作时,您知道它可能是与您的产品相关的构建/链接设置,鉴于其商业敏感性,这将很难诊断。此处的堆栈跟踪表明这可能不是Cocoa应用程序,或者如果是,则在调用NSApplicationLoad()
/NSApplicationMain()之前调用了NSLocale
方法已经调用了<代码>,所以基础库中的某些东西还没有初始化。您是否检查过您的用例是否可以被API覆盖?@pmdj请查看链接问题。我之所以需要使用它,是因为CFLocale
API正在返回缓存/过时的值。我希望用这一个,我可以得到最新的一个,尽管在C++代码中。是的,你是对的,这不是一个可可应用程序。我刚刚创建了一个普通的.mm文件,并从命令行而不是XCode编译/运行它。请显示link命令。我想确保正在链接Foundation
框架。@不幸的是,我无法发布link命令,因为它包含大量与IP相关的工件。但我检查并确认,Foundation
确实正在链接。请将该源文件拆分为单个文件,并将其从您的产品中构建和链接,看看是否有效。当它工作时,您知道它可能是与您的产品相关的构建/链接设置,鉴于其商业敏感性,这将很难诊断。此处的堆栈跟踪表明这可能不是Cocoa应用程序,或者如果是,则在调用NSApplicationLoad()
/NSApplicationMain()之前调用了NSLocale
方法已经调用了<代码>,所以基础库中的某些东西还没有初始化。您是否检查过您的用例是否可以被API覆盖?@pmdj请查看链接问题。我之所以需要使用它,是因为CFLocale
API正在返回缓存/过时的值。我希望用这一个,我可以得到最新的一个,尽管在C++代码中。是的,你是对的,这不是一个可可应用程序。我刚刚创建了一个普通的.mm文件,并从命令行而不是XCode编译/运行它。
2019-11-06 05:40:12.879 App[9062:303135] +[NSLocale autoupdatingCurrentLocale]: unrecognized selector sent to class 0x7fff8f86c458
2019-11-06 05:40:12.894 App[9062:303135] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[NSLocale autoupdatingCurrentLocale]: unrecognized selector sent to class 0x7fff8f86c458'
*** First throw call stack:
(
0 CoreFoundation 0x00007fff36daeecd __exceptionPreprocess + 256
1 libobjc.A.dylib 0x00007fff62e66720 objc_exception_throw + 48
2 CoreFoundation 0x00007fff36e2c1c5 __CFExceptionProem + 0
3 CoreFoundation 0x00007fff36d50b40 ___forwarding___ + 1486
4 CoreFoundation 0x00007fff36d504e8 _CF_forwarding_prep_0 + 120
5 testfun 0x000000010e72096a main + 58
6 libdyld.dylib 0x00007fff63f34ed9 start + 1
7 ??? 0x0000000000000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
Locale is
Abort (core dumped)