这些通知是代表我的应用程序(实现 GKSessionDelegate)记录的,我真的可以利用这些事件来帮助遇到连接困难的用户。有什么办法可以检测到它们吗?委托(delegate)没有任何直接引用这些事件的公共(public)实例方法。
我希望我可以为代表们配备某种通用事件包罗万象的东西。
GKSessionTester[79766:307] BTM: attaching to BTServer
GKSessionTester[79766:307] <<< Session >>> +[GKBluetoothSupport _determineBluetoothStatus]: BT not available - try again later.
GKSessionTester[79766:307] BTM: posting notification BluetoothAvailabilityChangedNotification
最佳答案
如Gonzalo评论中提到,看起来正在发布名为 BluetoothAvailabilityChangedNotification
的通知。
Cocoa 的通知系统基于 NSNotificationCenter,它维护观察者列表并根据名称转发通知,这些名称只是 NSString。如果您调用以下电话,您很可能会收到通知:
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(bluetoothAvailabilityChanged:)
name:@"BluetoothAvailabilityChangedNotification"
object:nil];
并实现该方法:
- (void)bluetoothAvailabilityChanged:(NSNotification *)notification
{
// maybe [notification userInfo] has some useful info...
}
如果 GameKit 使用单独的通知中心对象,您可能不会收到任何通知。
这算不算私有(private) API?我想说这并不比解析控制台输出更糟糕。您不是在未记录的类上调用方法,而是被动地观察以给定名称发布的通知。
当然,苹果的意见是唯一重要的。如果我处于你的立场,我会确保:
- 如果从未发布通知,您的应用程序将正常运行(因为 future 的 iOS 可能不会发布通知,或者您可能必须删除代码并在没有通知的情况下重新提交);
- 您的应用不会对 NSNotification 的
object
或其userInfo
字典的内容做出任何假设(因为它们今天包含的内容将来可能会发生变化)。
或者,您可以找出一种方法来拦截您自己的应用程序的 STDOUT 和 STDERR(任何适用于通用 UNIX 的解决方案也可以适用于 iOS)并观察相关日志消息的文本。
关于iphone - 委托(delegate)正在通过我的应用程序记录非公开事件 : can those events be detected?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6192019/