如果链接没有跳转到页面的正确部分,请找到localeIdentifierFromComponents(_:)
。
XCode 7.2游乐场
print(NSLocale.localeIdentifierFromComponents([
NSLocaleLanguageCode:"en",
NSLocaleCountryCode:"US",
NSLocaleCalendar: NSJapaneseCalendar
]))
//EXC_BAD_ACCESS
而
print(NSLocale.localeIdentifierFromComponents([
NSLocaleLanguageCode:"en",
NSLocaleCountryCode:"US",
]))
//"en_US"
如果我使用逆操作
print(NSLocale.componentsFromLocaleIdentifier("en_US@calendar=japanese"))
//["kCFLocaleCountryCodeKey": "US", "kCFLocaleLanguageCodeKey": "en", "calendar": "japanese"]
NSLocaleCalendar映射到kCFLocaleCalendarKey,而不是" calendar"
我做错了什么或者文档错了吗?
答案 0 :(得分:1)
我会说文档是错误的(你使用他们使用的确切示例),或者更可能的是,它是基金会中的实际错误(Xcode 7.2.1,Swift 2)至少快速访问它 - 这并不能确认Objective-C访问是否有效(尽管我猜它们是相同的)。
我建议提交bug report。
我的操场确认您的错误。即使有格列高利历,它也会爆炸。
//: Playground - noun: a place where people can play
import Foundation
let ident = NSLocale.localeIdentifierFromComponents([
NSLocaleLanguageCode:"en",
NSLocaleCountryCode:"US",
])
NSGregorianCalendar
NSJapaneseCalendar
NSLocale.componentsFromLocaleIdentifier("en_US")
NSLocale.componentsFromLocaleIdentifier("en_US@calendar=japanese")
let ident2 = NSLocale.localeIdentifierFromComponents([
NSLocaleLanguageCode:"en",
NSLocaleCountryCode:"US",
NSLocaleCalendar:NSGregorianCalendar // causing EXC_BAD_ACCESS
])