【发布时间】:2015-02-22 21:10:46
【问题描述】:
我使用 Swift 创建了一个 iOS 应用程序,并且在模拟器上一切正常。我根本没有收到任何错误或崩溃,但是当我将我的应用程序提交到应用程序商店时,Apple 拒绝了它,并让我知道它在用户做出选择时崩溃了。我无法重新创建此错误/崩溃。我拿了崩溃日志并用符号表示了它们。这行代码是导致崩溃的罪魁祸首:
linksToPass = getLinks(season) as [String:[String]]
这一行试图存储我创建的 getLinks() 函数生成的字典。它肯定会得到一本字典,如果没有要发回的字典,我会创建一个包含错误信息的字典,所以无论如何它肯定会返回该格式的字典。看到我无法重新创建崩溃,我只是试图以任何可能的方式错误检查这行代码,以便在我重新提交给 Apple 时它不会崩溃。
我尝试检查结果字典是否为 nil,如下所示:
if(getLinks(seasons) != nil){
linksToPass = getLinks(season) as [String:[String]]
}
虽然这无效,但 XCode 让我知道 UInt8 与 NSDictionary 或类似性质的东西不兼容。
然后我修复了该行并将其更改为:
if(getLinks(seasons) != ["":[""]]){
linksToPass = getLinks(season) as [String:[String]]
}
我只是不确定这是否是检查错误的好方法。我想知道是否有任何关于如何确保这条线不会失败并导致崩溃的建议。非常感谢。
编辑: 这是我的 getLinks() 函数,如果这有助于为问题添加更多信息:
var season = ""
let hymn_links = Hymn_Links()
func getLinks (nameofseason:String) -> NSDictionary
{
switch (nameofseason)
{
default:
return ["Maps Not Found": []]
}
}
编辑#2:
这是我使用可选项更新的 getLinks() 函数。
func getLinks (nameofseason:String) -> NSDictionary?
{
switch (nameofseason)
{
default:
return nil
}
}
在我的 linksToPass 声明中,我将其更改为:
if let links = getLinks(season) as? [String:[String]]
{
linksToPass = links
hymnnames = [String] (linksToPass.keys)
}
【问题讨论】:
-
您还应该发布您调用 getLinks() 的方法以及您如何声明季节
-
你使用的是 Swift,Swift 有 Optionals 就是因为这个原因。使用它们。
-
我在帖子中添加了 getLinks() 函数。希望这有助于使问题更加清晰。感谢莱昂纳多的建议。 @Zaph,我对 swift 比较陌生,所以请原谅我对这个话题的无知。我记得读过这件事。它与添加“?”有关。或者 ”!”对吗?
-
我想说的是,当人们选择一种语言时,应该按照设计的方式使用该语言。 Swift 在设计时考虑到了 Optionals,不能真正忽略它们,使用它们。忽略它们会导致崩溃。
-
我完全同意你的看法。感谢您引起我的注意。从现在开始,我一定会使用它们。
标签: ios swift error-handling nsdictionary