iphone - 委托(delegate)正在通过我的应用程序记录非公开事件 : can those events be detected?

标签 iphone objective-c cocoa-touch ios

这些通知是代表我的应用程序(实现 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?我想说这并不比解析控制台输出更糟糕。您不是在未记录的类上调用方法,而是被动地观察以给定名称发布的通知。

当然,苹果的意见是唯一重要的。如果我处于你的立场,我会确保:

  1. 如果从未发布通知,您的应用程序将正常运行(因为 future 的 iOS 可能不会发布通知,或者您可能必须删除代码并在没有通知的情况下重新提交);
  2. 您的应用不会对 NSNotification 的 object 或其 userInfo 字典的内容做出任何假设(因为它们今天包含的内容将来可能会发生变化)。

或者,您可以找出一种方法来拦截您自己的应用程序的 STDOUT 和 STDERR(任何适用于通用 UNIX 的解决方案也可以适用于 iOS)并观察相关日志消息的文本。

关于iphone - 委托(delegate)正在通过我的应用程序记录非公开事件 : can those events be detected?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6192019/

相关文章:

ios - 如何记录位掩码

iphone - 在 UITextField 中禁用放大镜

ios - 自定义字体可以在模拟器上使用,但不能在某些 Storyboard中渲染

ios - 人脸对比

ios - iOS 上根据国家/地区的电话格式

iOS-WatchKit 文件传输工作不可靠

objective-c - ICMP 和 iPhone SDK

iPhone 导航栏字体

iphone - 推送通知进入时调用的方法序列

ios - 将搜索栏/按钮/任何东西放在谷歌地图 View 的顶部