“主机连接<nsxpcconnection:0x538ee0 =”“>来自pid 42的连接无效”for iOS Today widget </nsxpcconnection:>

时间:2015-01-05 22:15:04

标签: ios objective-c widget

我正在研究今天的iOS小部件,而且功能非常强大。但是,在真实 iOS设备上运行时,我偶尔会看到: host connection <NSXPCConnection: 0x538ee0> connection from pid 42 invalidated

这似乎不是一个主要问题,只是在发生这种情况时窗口小部件似乎几乎重新加载,偶尔会将今日屏幕中的空格留空,直到iOS重绘它并重新加载所有内容。

还有其他人遇到过这个吗?我在我的应用程序中根本没有使用NSXPCConnection,所以我假设这是构建在框架中的东西,但我不确定

2 个答案:

答案 0 :(得分:9)

NSXPCConnection API用于在iPhone上执行Xcode客户端和应用程序之间的进程间连接。所以你不必担心这个。

链接: https://developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingXPCServices.html

因此,您的窗口小部件可能有两个原因终止。

  1. 您需要调用completionHandler(NCUpdateResultNoData);即使没有返回响应,也会在调用widgetPerformUpdateWithCompletionHandler之后立即调用。

  2. 您的应用因终止自动应用而终止。它终止了小部件/应用程序有两个原因:

  3.   

    一个。它会终止未使用的应用程序并允许使用   回收内存等资源。

         

    湾它终止了使用太多内存的小部件。

答案 1 :(得分:5)

最后找出了我的小部件问题。事实证明这与NSXPCConnection无关,而是代表我对Widget生命周期的误解。

从文档中我认为今天的视图将保持我的窗口小部件的“快照”状态,直到成功调用widgetPerformUpdateWithCompletionHandler方法完成处理程序。

似乎并非如此。从我所看到的情况来看,“今日视图”动画时(当用户拉下通知中心时)就会使用“快照”。加载今天视图并静止后,您的小部件将从头开始加载(如果使用则从xib中膨胀)并调用viewDidLoad。此时,您应该使用缓存数据(而不是Web请求)填充窗口小部件。如果不这样,您将看到笔尖的临时数据。这就是导致闪烁的原因。

当viewDidLoad完成时,调用widgetPerformUpdateWithCompletionHandler,它允许您获取新数据。获取新数据时,您应该调用完成处理程序并缓存数据,以便稍后从头开始加载窗口小部件时可以使用它(在viewDidLoad中)。

缓存数据的一种简单方法是用户默认值。

希望这有帮助。