问题描述
|
这些通知是代表我的应用程序(实现GKSessionDelegate)记录的,我真的可以利用这些事件来帮助遇到连接问题的用户。我有什么办法可以检测到它们?委托没有任何直接引用这些事件的公共实例方法。
我希望可以为代表提供某种通用的事件收集功能。
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)在评论中提到的那样,似乎发布了一个通知,名称为“1ѭ”。
可可的通知系统基于NSNotificationCenter,该中心维护一个观察者列表并根据名称(即NSStrings)转发通知。如果您致电,很有可能会收到通知:
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(bluetoothAvailabilityChanged:)
name:@\"BluetoothAvailabilityChangedNotification\"
object:nil];
并实现方法:
- (void)bluetoothAvailabilityChanged:(NSNotification *)notification
{
// maybe [notification userInfo] has some useful info...
}
如果GameKit使用单独的通知中心对象,则您可能不会收到任何通知。
这算作私有API吗?我会说,这不比解析控制台输出更糟。您不是在未记录类上调用方法,而是在被动地观察以给定名称发布的通知。
当然,苹果的观点是唯一重要的观点。如果我穿上你的鞋子,我将确保:
如果从未发布过通知,则您的应用程序可以正常运行(因为将来的iOS可能不会发布该通知,或者您可能必须删除代码并在没有通知的情况下重新提交);
您的应用程序不对NSNotification的object
或其its5ѭ词典的内容进行任何假设(因为它们现在包含的内容将来可能会更改)。
或者,您可以找出一种方法来拦截自己的应用程序的STDOUT和STDERR(任何适用于通用UNIX的解决方案都可以在iOS上运行)并查看文本以获取相关的日志消息。