【发布时间】: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 中单击“播放”按钮,但在尝试之前我从未直接从手机中删除它...我会尝试,我会让你知道..谢谢!