【问题标题】:userDefaults.setObject crashes on device but not in iOS simulatoruserDefaults.setObject 在设备上崩溃,但在 iOS 模拟器中没有
【发布时间】:2014-07-24 09:21:25
【问题描述】:

我在使用应用程序时遇到问题。它在模拟器中运行,但在真实设备中启动时崩溃。 代码很简单:

class loginScreen: UIViewController {

    let userDefaults = NSUserDefaults.standardUserDefaults()

  override func viewDidLoad() {
    super.viewDidLoad()

    userDefaults.setObject("127.0.0.1", forKey: "host")
    userDefaults.synchronize()
}

我在 iOS 7 和 iOS 8 模拟器上对此进行了测试,没有出现任何问题,但在真实设备上执行时,它会在 userDefaults.setObject("127.0.0.1", forKey: "host") 线,我真的不知道为什么。 在调试器控制台中,我没有任何消息(崩溃时 setObject 行中的“EXC_BAD_ACCESS”除外),并且在 iPhone 崩溃日志中我可以阅读:

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Subtype: KERN_INVALID_ADDRESS at 0xfffffffc

我不明白为什么两个“系统”之间的行为如此不同..

当然我尝试了很多建议,例如:

  • 在 setObject 方法之前放置和userDefaults.synchronize()

  • 声明一个值为“127.0.0.1”的NSString变量并在setObject方法中使用

  • 使用 setValue 代替 setObject

  • 使用不同的类型(userDefaults.setObject(666, forKey: "host")

但没有任何变化,当它尝试为 userDefaults 设置值时总是崩溃...任何帮助或建议将不胜感激!

PS:评论userDefaults.setObject("127.0.0.1", forKey: "host")userDefaults.synchronize()应用启动没有问题

谢谢!

【问题讨论】:

  • 您确定问题出在用户默认设置上吗,请尝试评论最后两行并运行该应用程序,看看它是否仍然崩溃,如果确实如此,那么它与您的视图设置相关
  • 对不起..我的错..我忘了在我的“尝试”中列出这个..无论如何,如果没有这些行,应用程序运行没有问题,所以我很确定问题出在 userDefaults..但我不明白为什么只能在真实设备上..(我编辑我的帖子添加了这个尝试)
  • 在尝试此操作之前,您是否确保删除了手机上任何以前版本的应用程序?
  • 老实说..不..我的意思是,我在 XCode 中单击“播放”按钮,但在尝试之前我从未直接从手机中删除它...我会尝试,我会让你知道..谢谢!

标签: ios iphone swift xcode6


【解决方案1】:

似乎清理项目并在设备上重新安装它可以解决问题。谢谢大家的回复!

【讨论】:

    猜你喜欢
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多