userDefaults.setObject在设备上崩溃但在iOS模拟器中崩溃

时间:2014-07-24 09:21:25

标签: ios iphone swift xcode6

我在申请时遇到问题。它在模拟器中运行,但它在真实设备中启动时崩溃。 代码非常简单:

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()应用开始没有问题

谢谢!

1 个答案:

答案 0 :(得分:0)

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