일부 대체 케이스를 사용하여 주 번들의 localizedInfoDictionary
에서 현지화 된 앱 이름을 신속하게 가져올 수 있습니다.Foundation 개체에서 처리하는 예외 처리?
private func defaultAppName() -> String {
var name: NSString = ""
// Check for a localized version of the CFBundleDisplayName
var mainBundle = NSBundle.mainBundle()
// EXC_BAD_ACCESS HERE, despite the optional
var mainBundleInfoDictionary: Dictionary<NSObject, AnyObject>? = mainBundle.localizedInfoDictionary
if let infoDictionary = mainBundleInfoDictionary {
name = infoDictionary["CFBundleDisplayName"] as NSString
if (name.length == 0) {
name = infoDictionary[kCFBundleNameKey] as NSString
}
}
if (name.length == 0) {
mainBundleInfoDictionary = mainBundle.infoDictionary
if let infoDictionary = mainBundleInfoDictionary {
name = infoDictionary["CFBundleDisplayName"] as NSString
if (name.length == 0) {
name = infoDictionary[kCFBundleNameKey] as NSString
}
}
}
return name
}
나는 그것이 간결하지 않다는 것을 알고있다, 그러나 나는 아직도 신속한 배우고있다. 내가보고있는 문제는 mainBundle.localizedInfoDictionary
에 액세스하는 것이 찾지 못할 때 nil을 반환하지 않고 오히려 EXC_BAD_ACCESS
을 던지는 것입니다. 이 기능이 사용되는 앱에 현지화 된 정보가 있다는 것을 보장 할 수는 없지만 표준 옵션을 신속하게 처리하는 방법은 여기서 작동하지 않습니다.
NSBundle의 localizedInfoDictionary
호출에 의해 throw 된 예외를 잡아 내거나 이동하기 위해 신속한 코드를 적용하려면 어떻게해야합니까?
현재이 문제에 대한 해결책이없는 것으로 보입니다. 유사한 문제는 http://stackoverflow.com/questions/24710424/catch-an-exception-for-invalid-user-input-in-swift를 참조하십시오. http://stackoverflow.com/questions/24023112/try- 신속한 catch-catchions. –
그래, 나는 예외를 잡을 방법이 있다고 생각하지 않았다. 나는 여전히 충돌없이 지역화 된 이름을 얻는 것에 관심이있다. – coneybeare