【问题标题】:Swift: app runs well in simulator but crashes on actual iPhone?Swift:应用程序在模拟器中运行良好但在实际 iPhone 上崩溃?
【发布时间】:2014-07-26 01:15:54
【问题描述】:

我是一个初学者,我创建了一种井字游戏,并一直在 iPhone 5s 模拟器上运行它以排除问题,刚才我在我的实际 iPhone 5s 上尝试了它,当 AI 时应用程序崩溃了应该轮到它了。 Xcode 在下面一行画了一个错误(EXC_BAD_ACCESS):

//Bunch of functions that check for exact spots:

func checktop(value:Int)->(location:String,pattern:String) {
    return ("top", checkFor(value, spots: [1,2,3])) //This line has error
}
func checkbottom(value:Int)->(location:String,pattern:String) {
    return ("bottom", checkFor(value, spots: [7,8,9]))
}
func checkmidAcross(value:Int)->(location:String,pattern:String) {
    return ("middle across", checkFor(value, spots: [4,5,6]))
}
func checkleft(value:Int)->(location:String,pattern:String) {
    return ("left down", checkFor(value, spots: [1,4,7]))
}
func checkmidDown(value:Int)->(location:String,pattern:String) {
    return ("middle down", checkFor(value, spots: [2,5,8]))
}
func checkright(value:Int)->(location:String,pattern:String) {
    return ("right down", checkFor(value, spots: [3,6,9]))
}
func checkLRdiag(value:Int)->(location:String,pattern:String) {
    return ("left-right diagonal", checkFor(value, spots: [1,5,9]))
}
func checkRLdiag(value:Int)->(location:String,pattern:String) {
    return ("right-left diagonal", checkFor(value, spots: [3,5,7]))
}

为什么应用程序在模拟器上运行得很好,但在实际设备上却崩溃了?怎么了? 这是我的 checkFor 方法:

func checkFor(value:Int, spots:Int[])->(String) {
    var conclusion = ""
    for cell in spots {
        if plays[cell] == value {
            conclusion += "1"
        }
        else {
            conclusion += "0"
        }
    }
    return conclusion
}

func isOccupied(spot:Int)->(Bool) {
    return Bool(plays[spot])
}

【问题讨论】:

  • 您正在访问已释放的内存。 value 可能是 nil
  • @duci9y 所以如果我的valuenil 我该如何修复我的代码?我应该把所有的values 拿出来吗?
  • 因为那样会搞砸我的其余代码

标签: ios swift


【解决方案1】:

我的应用程序在我的设备上崩溃并出现同样的错误,但在模拟器上却没有。事实证明,我的 iOS 8 测试版与我的 Xcode 测试版不匹配。因此,我会检查并确保您的 iOS 8 测试版和 Xcode 测试版都在版本 4 上(撰写本文时的最新版本)。还要确保您完全重新安装应用程序,清理构建文件夹等。

这当然是假设您的代码没有错误。如果上述方法不起作用,也许您可​​以发布您的 checkFor 方法。

【讨论】:

  • 所以我的手机不在 iOS 8 beta 上,所以我只是将我的应用程序的部署目标设置为 7.1,我很确定这就是我的手机,我认为这不应该是问题?好的,我刚刚发布了我的 checkFor 方法。
  • 所以应用程序在 iOS 8 模拟器上运行良好,但在您的非 iOS 8 设备上运行良好,对吗?你有最新的 Xcode 6 测试版吗?如果是这种情况,那么它可能只是一个你需要等待 Apple 修复的错误。但是,正如其他人所指出的那样,您在那条线上收到 BAD_ACCESS 的事实让我认为您的“价值”为零。您应该调试它并查看您的值是否确实为零。如果是,那么您的代码中某处有错误。也许来自使用可选类型。但它在 iOS 8 模拟器上运行良好的事实让我认为这可能是一个 Apple 错误。
  • 是的,我现在使用的是最新版本的 Xcode 6,所以您可能是正确的,但是我现在有一条黄色错误消息,上面写着“仅 iOS 支持可重定位 dylib(例如嵌入式框架) 8.0 及更高版本”。这可能与问题有关吗? @gfrs
  • Xcode 是否有问题,因为我没有在 iOS 8 设备上运行它?
  • 嵌入式框架警告实际上是 beta 4 中的一个错误。您可以忽略它。如果您拥有最新的 Xcode,请告诉我是否可以在您的设备上运行它。请务必在运行之前卸载应用程序并清理构建文件夹。如果您仍然遇到崩溃,那么您的最终解决方案是尝试找到一种方法在运行 iOS 8 的实际设备上运行该应用程序。如果仍然崩溃,那么错误必须在您的代码中,否则很可能是 Apple错误。
猜你喜欢
  • 1970-01-01
  • 2011-08-29
  • 1970-01-01
  • 2015-07-26
  • 2011-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多