NSLocale NSLocaleCalendar 导致 EXC_BAD_ACCESS

NSLocale NSLocaleCalendar causes EXC_BAD_ACCESS

我正在使用以下文档 -https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSLocale_Class/index.html#//apple_ref/occ/clm/NSLocale/localeIdentifierFromComponents:

如果 link 没有跳转到页面的正确部分,则查找 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"

我是做错了什么还是文档有误?

我会说文档是错误的(您使用的是他们使用的确切示例),或者更可能的是,它是 Foundation 中的一个实际错误(Xcode 7.2.1,Swift 2) 至少 Swift 访问它 - 这并不能确认 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
    ])