通过NSNotificationCenter 发送通知

问题:

  想在APP中发布一条通知,同时允许其他对象接收通知并根据你广播的内容采取相应的行动.

讨论:

  通知中心是通知对象的派送中心, 例如,在用户使用 App 时如果键盘显示出来了,iOS 会发送一条通知到你的应用,程序中的任何对象都可以通过将自己添加到通知中心,作为一个观察者,来监听此通知。当对象的的生命周期即将结束时,需要将该对象从通知中心的派送表中移除。

  这样,一条通知就相当于一个消息被通知中心广播给它的观察者。通知中心是 NSNotificationCenter 类的一个实例对象。我们通过 NSNotificationCenter 的 defaultCenter 类的实例方法获取系统默认的通知中心实例;

  通知本身就是 NSNotification 类的对象。一条通知对象有一个名称(标记为 NSString),它可以携带 2 条重要信息:(注意:你可以不需要使用 API 就给自己的通知命名,只要确保此条通知命名足够特别到不会与系统信息冲突.)

发送者:

  发送者就是消息的发起对象.观察者可以通过NSNotification类的object方法获得发送者.

用户信息字典:

  这是一个可选项字典。这个字典通常包含关于此条通知的更多信息。

   例如,当键盘在程序中显示出来时,iOS 会发送一个 UIKeyboardWillShowNotification 通知到通知中心,这个通知的用户信息字典会包含键盘的尺寸,以及键盘动画的时间。使用这些数据,观察者可以作一些决定,例如,让被键盘遮挡的界面重新正确的显示出来。

方法:

  使用 NSNotificationCenter 中 default notificationcenter 的 postNotificationName:object:userInfo:的实例方法发布一条通知,其中携带一个对象(通常此对象激活通知)和一条关于用户信息的词典,词典中包含了关于此条通知和/或者激活通知的对象的额外信息。

   为了建立 NSNotification 类的通知,要使用 NSNotification 的实例方法 notificationWithName:object:userInfo: class。

  注意:最好在通知名称前以 Notification 作为后缀。例如,允许通知名称为这样 ResultOfAppendingTwoStrings。然而,这样命名 ResultOfAppendingTwoStringsNotification 会更好。 

例子:

NSString *firstName = @"Anthony";
    NSString *lastName = @"Robbins";
    NSString *fullName = [firstName stringByAppendingString:lastName];
    NSArray *objects = [[NSArray alloc] initWithObjects:
                                                firstName,
                                                lastName,
                                                fullName,
                                                nil];
    NSArray *keys = [[NSArray alloc]initWithObjects:
                                                @"firstString",
                                                @"secondString",
                                                @"resultString",nil];
    NSDictionary *userInfo = [[NSDictionary alloc]initWithObjects:objects forKeys:keys];
    //创建一个通知实例
    NSNotification *notificationObject = [NSNotification notificationWithName:@"ResultOfAppendingTwoStringsNotification" object:self userInfo:userInfo];
    //创建一个通知中心来发送通知
    [[NSNotificationCenter defaultCenter]postNotification:notificationObject];

注意:有时我们没有必要为每个通知都制定发送者和用户信息字典参数.如果你不打算携带发送者和用户信息字典,建议使用 NSNotificationCenter 中postNotificationName:object:的实例方法,第一个参数传入一个字符串代表通知的名字,第二个参数传入 nil。

时间: 2024-10-29 19:07:01

通过NSNotificationCenter 发送通知的相关文章

Swift - 使用NSNotificationCenter发送通知,接收通知

1,通知(NSNotification)介绍 这里所说的通知不是指发给用户看的通知消息,而是系统内部进行消息传递的通知.要介绍通知之前,我们需要先了解什么是观察者模式. 观察者模式 (Observer):指一个对象在状态变化的时候会通知另一个对象.参与者并不需要知道其他对象的具体是干什么的 .这是一种降低耦合度的设计.常见的使用方法是观察者注册监听,然后在状态改变的时候,所有观察者们都会收到通知. 在 MVC 里,观察者模式意味着需要允许 Model 对象和 View 对象进行交流,而不能有直接

扫描仪通过SMTP中继服务器发送通知邮件失败

现象描述: 前2天有客户给我打电话说有1个办公地点的扫描仪扫描的文件多的话,收件人是无法收到通知邮件的,扫描仪上未显示任何错误:如果扫描的数量比较少如几张的话收件人就可以正常收到扫描通知邮件(客户的环境是在本地搭建了SMTP中继服务器,所有的业务应用,如:扫描仪.打印机.OA.SQL通知等都是通过SMTP中继服务器连接到Office 365进行通知邮件发送的) 分析过程: 1. 通过现象初步判断应该是扫描的文件太大超过了限定的设置所致,通过检查SMTP中继服务器的发送大小限制,SMTP中继服务器

xmpp关于后台挂起的消息接收,后台消息推送,本地发送通知

想问下,在xmpp即时通讯的项目中,我程序如果挂起了,后台有消息过来,我这边的推送不过来,所以我的通知就会收不到消息,当我重新唤醒应用的时候,他才会接收到通知,消息就会推送过来,我在plist哪里设置了他的电话服务,因为那是长连接不会睡眠,可是我上架AppStore的时候就会被拒绝了,说我没实现那个服务.就是 Required background modes 这个服务,但是只要我使用这个服务,他就必须要实现打电话功能,我项目中没有这个功能,不知道怎么解决后台挂起不让他进入睡眠状态,等接收到后台

Android(NotificationManager 发送通知)

该应用的界面如下,界面代码在此不再给出 MainActivity.java 1 public class MainActivity extends Activity { 2 private TextView tvTitle; 3 private TextView tvContent; 4 private Button btnSend; 5 private String title; 6 private String content; 7 8 public void onCreate(Bundle

android发送通知及更新通知

/** * 发送通知 */ public void setNotification(){ /** start */ //1.得到NotificationManager: mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); // 创建一个新的Notification对象,并添加图标 notification = new Notification(); // 通知显示

iOS开发之:NSNotificationCenter(通知)的使用方法

iOS软件开发的时候会遇到这种情况:打开APP后会在后台运行某个方法,例如下载文件,下载完成后可能需要调用某个方法来刷新界面,这时候可能没法在下载的函数中回调.NSNotificationCenter(通知)是一个很好的选择. 通知使用起来非常的简单: 1. 定义将要调用的方法: - (void)callBack{     NSLog(@"thisis Notification."); } 2. 定义通知: [[NSNotificationCenter defaultCenter] a

SQL Server 2008 R2中配置作业失败后邮件发送通知

SQL Server日常维护中难免会遇到作业失败的情况.失败后自然需要知道它失败了,除了例行检查可以发现出错以外,有一个较实时的监控还是很有必要的.比较专业的监控系统比如SCOM虽然可以监控作业执行情况在出错时进行报警,但对于DBA来说可能可定制性不高,最主要的是负责监控的人员在看到报警后一般都需要立刻联系DBA来解决,对于一些重要性不高的作业失败了,大半夜把你叫起来,感觉肯定是不爽的.SQL Server 本身支持发送数据库邮件,结合发送邮件的功能,在作业失败后将出错情况通过邮件通知DBA,这

Notification发送通知

今天学习并测试了Notification组件,这个组件在应用中也经常用到.在这里写了一个简单的Demo. Notification是显示在状态栏的消息----位于手机屏幕的最上方. 程序一般通过NotificationManager服务来发送Notification. Notification发送Notification的步骤 1.调用getSystemService(NOTIFICATION_SERVICE)方法获取系统 NotificationManager服务 2.通过构造器创建一个Not

微信发送通知消息 thinkphp

函数核心部分,注意引用了 import ( "ORG.Util.ThinkWechat" ); //函数 //微信发送消息提醒 /* * 账单ID $bill_id * 收件人 $openid * 内容 $content * 类型 $type 1还款提醒 2逾期还款通知 3还款成功通知 */ function send_wxsms($bill_id,$openid,$content,$url='',$type){ //开始发送消息模板通知 define("APPID"