(iOS Swift)某些功能在模拟器上工作,但在设备上不工作

(iOS Swift)某些功能在模拟器上工作,但在设备上不工作,ios,iphone,Ios,Iphone,我正在制作一个闹钟应用程序。有两种东西可以在模拟器上工作,但不能在我的设备上工作 1) 根据该网站的说法,如果UIApplicationExitsOnSuspend设置为“是”,那么即使设备被锁定(前提是它位于前台),应用程序也应该始终运行。我使用此信息来确保即使设备已锁定,NSTimer也会运行。在模拟器上,无论经过多少时间(甚至10个多小时),NSTimer始终工作,声音始终发出(即使我锁定模拟器屏幕)。当我将iPhone设备连接到电脑并通过xcode运行应用程序时,它也能正常工作。但问题是

我正在制作一个闹钟应用程序。有两种东西可以在模拟器上工作,但不能在我的设备上工作

1) 根据该网站的说法,如果UIApplicationExitsOnSuspend设置为“是”,那么即使设备被锁定(前提是它位于前台),应用程序也应该始终运行。我使用此信息来确保即使设备已锁定,NSTimer也会运行。在模拟器上,无论经过多少时间(甚至10个多小时),NSTimer始终工作,声音始终发出(即使我锁定模拟器屏幕)。当我将iPhone设备连接到电脑并通过xcode运行应用程序时,它也能正常工作。但问题是,一旦我断开手机连接并加载保存的应用程序,NSTimer有时工作,有时不工作

2) 本地通知:在模拟器上,本地通知工作正常,但在iPhone设备上,通知是随机触发的,有时甚至不会触发。但在模拟器上,本地通知会准确地发出。我以不同的方式进行了测试(例如,将本地通知设置为在应用加载20秒后启动,然后退出应用以进入后台模式),但它没有在指定的时间启动,就像我说的,有时甚至不会启动


在这种情况下,我应该信任模拟器还是iPhone设备?这可能是一个bug,还是我做错了什么?

始终信任设备。毕竟,这就是最终用户运行你的应用程序的方式

众所周知,您不应该信任模拟器的后台行为。NSTimer问题就是一个很好的例子。问题是模拟器是您的计算机,而不是iOS设备。计时器实际上并不在后台运行;模拟器误导了你。(如果从Xcode运行与独立运行,应用程序在设备上的行为会有所不同,这一点更令人惊讶,但在这种情况下,我想这并不奇怪;您非常聪明地考虑了两种测试方法。)


当然,还有很多iOS功能在模拟器上根本不起作用。

我找到了#2的问题所在。我只是在启动新的通知之前取消了以前的通知


我仍然面临第一个问题。

我认为这不是问题所在。在NSTimer的例子中,只要它通过xcode运行,它就可以在我的设备上正常工作。但当我不运行xcode时,它就不会…“我不认为这是问题所在,马特”我不知道你的意思。你问我该相信什么,我告诉了你答案。您在从springboard启动的设备上进行的测试是决定性的测试(如果您进行发布构建,则更具决定性);没有别的了。你可以相信我,也可以不相信我,但这就是答案。你肯定回答了我关于我应该信任什么的问题,但我仍然被前两个问题困扰着:)我重复一遍:你唯一的问题是“我应该信任模拟器还是iPhone设备?”。其他一切都只是对现象的描述。例如,如果您有一个关于如何使用NSTimer的问题,这就是您应该问的问题。但是你没有。在Xcode下运行的应用程序可以获得无限的后台执行时间,无论是在模拟器中运行还是在设备上运行。您可以通过从计时器方法中记录
ui应用程序
对象的
backgroundTimeRemaining
属性来验证这一点。您将看到它达到0,但您的应用程序仍在运行。当独立于Xcode运行时,当该值达到0时,应用程序将终止。