【发布时间】:2014-09-14 17:54:08
【问题描述】:
我有一个 swift 函数可以从主包的 localizedInfoDictionary 获取本地化的应用程序名称,并带有一些后备情况。
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
}
我知道这并不简洁,但我仍在学习 swift。我看到的问题是访问mainBundle.localizedInfoDictionary 在找不到时不会返回零,而是抛出EXC_BAD_ACCESS。我不能保证在使用此功能的应用程序中会有本地化信息,但标准的快速处理选项的方法在这里不起作用。
如何捕获 NSBundle 的 localizedInfoDictionary 调用引发的异常或调整我的 swift 代码以继续前进?
【问题讨论】:
-
这个问题目前好像没有解决办法。类似问题请参见stackoverflow.com/questions/24710424/…,以及stackoverflow.com/questions/24023112/…。
-
是的,我认为没有办法捕获异常。我仍然有兴趣在不崩溃的情况下获取本地化名称。
标签: ios swift ios8 optional-parameters foundation