问题标签 [nsnotification]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1010 浏览

objective-c - NSNotification 问题

当我的类初始化时,它会将自己添加为一堆不同 Wi-Fi 通知的观察者。出于某种原因,当这些事情发生时,选择器没有运行。有任何想法吗?提前谢谢你。

更新:这是 handleNotification 方法:

我已将 CoreWLAN 框架包含到我的项目中: 在此处输入图像描述

我已经下载了 CoreWLANWirelessManager.app,这是我用来参考的。奇怪的是,Apple 的代码使用了已弃用的通知,但它仍然有效。我尝试使用新的 API 和不推荐使用的 API,但没有成功。我不确定我是否可以在这里发布他们的代码,但实际上没有区别。选择器甚至具有相同的名称。

请不要犹豫,要求进一步详细说明。

更新(在达斯汀的回答之后):我创建了一个新项目,希望能隔离这个问题。正如您所描述的那样,我设置了我的 .h 和 .m 文件。可悲的是,我仍然没有收到任何通知。为了向您展示我没有说谎(或疯了),我包含了两个(相当拥挤的)屏幕截图,它们是在同一运行时拍摄的。注意:(1。我在 handleNotification: 方法中有一个断点。应用程序永远不会暂停。(2。我包含网络窗口以显示我的 Mac此运行时确实更改了 Wi-Fi 网络。(3。没有 NSLoged

网络 1: 在此处输入图像描述

网络 2: 在此处输入图像描述

2012 年 5 月 17 日更新:Dustin 的回答是正确的,但 Wi-Fi 接口名称因应用程序运行的硬件而异。就我而言,(MacBook Air;没有以太网),我的 Wi-Fi 是 en0 而不是 en1。我设法从我妈妈的 iMac 上获取了系统配置 plst 文件,Wi-Fi 被称为 en1。以太网是 en0。谢谢大家的帮助。

0 投票
2 回答
7088 浏览

iphone - KVO - 如何获取已注册观察者的对象列表

我正在动态地在一堆 tableview 控制器上注册一个观察者,所以如果他们在同一个对象上注册,我需要删除以前的观察者。为此,我需要检查对象上是否存在观察者。

这可能吗?我知道使用 NSNotification 你可以使用 NSNotification 中心单例,但是这对于 KVO 是一样的吗?

0 投票
1 回答
449 浏览

ios - 有没有办法限制 NSNotification?

当开关改变位置以开始更新地图上的注释时,我NSNotification会发送通知。我的问题是我有 8 个开关,当用户更改几个开关的位置时,地图会更新很多次。如何将其限制为只有一个通知?

在另一个视图中

更新注释

0 投票
1 回答
702 浏览

objective-c - NSNotifications 与同一协议的多个实例的委托

我可以使用一些架构建议。我现在几次遇到以下问题,但我从来没有找到一种真正优雅的方法来解决它。

这个问题,尽可能在最高级别描述
我有一个父类想充当多个孩子的委托(都使用相同的协议),但是当孩子调用父母的方法时,父母不再知道哪个孩子正在打电话。

我想使用松散耦合(委托/协议或通知)而不是直接调用。我不需要多个处理程序,所以通知看起来可能有点矫枉过正。

为了说明这个问题,让我尝试一个超级简化的例子
我从一个父视图控制器(和相应的视图)开始。我创建了三个子视图并将它们中的每一个插入到父视图中。我希望每当用户触摸其中一个孩子时通知父视图控制器。有几个选项可以通知家长:

  1. 定义协议。父级实现协议并将自己设置为每个子级的委托。当用户触摸一个子视图时,它的视图控制器调用它的委托(父)。在这种情况下,父级被通知一个视图被触摸,但它不知道是哪一个。还不够好。

  2. 与#1 相同,但在协议中定义方法也传递某种标识符。当孩子告诉它的代表它被触摸时,它也会传递一个指向它自己的指针。这样,父母就可以确切地知道触摸了哪个视图。一个对象传递自己的引用似乎真的很奇怪。

  3. 使用 NSNotifications。父级为三个子级中的每一个定义一个单独的方法,然后作为通知发送者为三个子级中的每一个订阅“viewWasTouched”通知。孩子们不需要将自己附加到用户字典,但他们确实需要发送带有指向自己的指针作为范围的通知。

  4. 与 #4 相同,但不是使用单独的方法,父级可以只使用一个带有 switch case 或其他分支的方法以及通知的发送者来确定采用哪条路径。

  5. 创建多个充当子视图代表的中间人类,然后使用指向子视图的指针或其他一些差异化因素调用父视图上的方法。这种方法似乎不可扩展。

这些方法中的任何一种都被认为是最佳实践吗?我不能肯定地说,但感觉就像我错过了一些更明显/优雅的东西。

0 投票
1 回答
1142 浏览

objective-c - 负责 CWInterface 通知的“系统套接字”的 OSX 权利?

当我像这样注册 CoreWLAN 通知(带有保留的界面)时:

只有当我禁用所有权利时我才会收到通知。所有默认权利都不允许我接收此(或其他 CoreWLAN)通知。

有任何想法吗?

10.7.4


编辑1:

权利参考页面没有提供任何帮助。


编辑2:

伪造通知工作正常:

并且也没有收到任何其他 CoreWLAN 通知。

我确信这是我缺少的一个简单的权利......这是带有 Growl 临时异常的权利文件(删除临时异常也没有效果):


编辑3:

使用旧的 k 前缀通知名称为 10.6 编译也无效。


编辑4:

来自日志的更多信息:

AppName (39009) 拒绝系统套接字

进程:AppName [39009] 路径:
/Users/username/Library/Developer/Xcode/DerivedData/AppName-fnxrpqnodsouovcaxgiocvnfpqor/Build/Products/Release/AppName/Contents/MacOS/AppName 加载地址:0x10d23f000 标识符:AppName 版本:
??? (???) 代码类型:X86-64(本机)父进程:debugserver [39007]

日期/时间:2012-07-20 13:17:11.851 -0700 操作系统版本:Mac OS X 10.7.4 (11E2705) 报告版本:7

回溯:0 libsystem_kernel.dylib 0x00007fff98704e76插座+ 10 1 CoreWLAN 0x00007fff951f4a6f Apple80211EventMonitoringInit2 + 53 2 CoreWLAN
0x00007fff951e6dc4 - [CWInterface initWithInterfaceName:] + 1358 3
CoreWLAN 0x00007fff951e412d + [CWInterface interfaceWithName:] + 52 4 CoreWLAN
0x00007fff951e41a8 + [CWInterface接口] + 98


编辑5:

在 sandboxd 中找到了拒绝 system-socket 的参考,但还没有帮助。

0 投票
1 回答
41 浏览

icloud - 在 iCloud 应用程序中编辑期间是否有必要将 viewController 作为观察者移除?

以两台 iOS 设备运行具有 iCloud 支持的同一应用程序为例。该应用程序具有 CoreData 并且是“库”样式,而不是多文档样式的应用程序。

用户 A 正在使用该界面添加对象,并且在此添加过程中,用户 B 将 MOC 与另一个设备上的新对象一起保存。在用户 A 完成添加他的对象之前,用户 A 的设备上的通知将导致添加用户 B 的对象。这可能会导致在 A 的设备上的 [tableView reloadData] 期间 fetchedObjects 的数量发生变化......以及我相信的错误情况。

每当用户编辑 MOC 时,我是否需要将 viewController 作为观察者移除?如果是这样,一旦提到的 viewController 被重新添加为观察者,iCloud 是否会“感知”到这一点并重新发送“错过”的通知?我一直找不到对此的讨论。

非常感谢您的阅读。标记

0 投票
1 回答
3807 浏览

ios - NSNotificationCenter AppDelegate 发布通知问题

我的应用程序每天执行一次或在收到本地通知时执行一系列处理方法以执行一系列任务并按预期工作。

我尝试将 ActivityIndi​​cator 添加到视图中,当收到从 AppDelegate 发送来执行任务的通知时,该视图开始动画。然而,所发生的只是屏幕变暗,没有任何处理完成,活动指示器也没有出现。使屏幕变暗的指示器和子视图在应用程序的其他地方使用,并且肯定可以正常工作。我认为这一定与导致应用程序挂起并且没有继续调用任何其他方法的通知有关,因此它永远不会完成。

这是应用程序委托中的通知,在调用日常处理方法以启动视图控制器中的活动指示器之前调用,第二个通知视图控制器删除子视图。

该方法在 AppDelegate 中;

这是在另一个视图中拾取的,通知设置在viewDidLoad.

那些在那个视图中调用这些方法。

通知必须在半透明子视图出现时发送,但是似乎没有调用任何处理方法,因此视图被永久锁定,直到我强制关闭应用程序。

发送通知是否会更改应用程序启动序列的当前流程,从而停止继续执行类中的代码?或者我是否尝试添加一个活动指示器以在某些幕后处理完全错误的方式期间显示?

0 投票
1 回答
165 浏览

iphone - 有没有办法访问通知中心显示的通知?

我有一种待办事项本地通知,可以正常触发。

因此,例如,如果 2 个通知已触发,则徽章编号变为 2。

现在我也喜欢在用户直接启动应用程序时处理这些通知- 而不是通过通知中心。

所以徽章编号为 2,用户单击应用图标启动应用,应用应该知道通知中心中有哪 2 个通知。

虽然我知道如何在它们触发之前获取所有预定的通知 - 有没有一种方法可以访问通知中心中存在的所有通知,因为它们已经触发。

由于用户也可以直接从通知中心清除通知,因此实际上无法从应用程序内部跟踪通知中心中显示的通知。

非常感谢!

0 投票
3 回答
575 浏览

objective-c - iOS / Objective-C:NSNotification

我有一个基于 Objective-C 中的 NSNotification 的问题:

我真的不知道如何设置对象属性...

那么,如果我只想接收来自 a 类的通知,如何将其设置为 a 类?

不工作。

我对对象参数感到非常困惑。

0 投票
1 回答
1179 浏览

xcode - NSDistributedNotificationCenter 的可用通知

我正在寻找存在于 Mac 上的分布式通知列表,例如 iTunes com.apple.iTunes.playerInfo,但我找不到任何东西。我想知道 Safari 或 QuickTime 等其他应用程序是否有此类通知?如果它们存在,它们的通知名称是什么?

问候