2016-02-23 8 views
2

Я использую последующий документ - https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSLocale_Class/index.html#//apple_ref/occ/clm/NSLocale/localeIdentifierFromComponents:NSLocale NSLocaleCalendar вызывает EXC_BAD_ACCESS

Найти 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("[email protected]=japanese")) 
//["kCFLocaleCountryCodeKey": "US", "kCFLocaleLanguageCodeKey": "en", "calendar": "japanese"] 

NSLocaleCalendar карты в kCFLocaleCalendarKey, а не "календарь"

Так я делаю что-то не так, или документы просто ошибаются?

+0

Это не вы. Кажется, что вы можете сказать что-то вроде: 'печати (NSLocale.localeIdentifierFromComponents ([ NSLocaleLanguageCode: "ан", NSLocaleCountryCode: "США", "календарь": "японский" ]))', если вы хотите работать вокруг – beyowulf

ответ

1

Я бы сказал, что документы неправильные (вы используете точный пример, который они используют), или, что более вероятно, это настоящая ошибка в 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("[email protected]=japanese") 

let ident2 = NSLocale.localeIdentifierFromComponents([ 
    NSLocaleLanguageCode:"en", 
    NSLocaleCountryCode:"US", 
    NSLocaleCalendar:NSGregorianCalendar // causing EXC_BAD_ACCESS 
    ]) 
+1

сообщение об ошибке, спасибо – wyu