NSLocale NSLocaleCalendar导致EXC_BAD_ACCESS

时间:2016-02-23 20:46:55

标签: ios swift nslocale

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

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

我做错了什么或者文档错了吗?

1 个答案:

答案 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
    ])