全球彩票平台_全球彩票注册平台|官网下载地址

热门关键词: 全球彩票平台,全球彩票注册平台,全球彩官网下载地址

全球彩票平台通知的运用,请告诉我

iPhone开发消息通信机制NSNotificationCenter是本文要介绍的内容,主要是来学习消息通信机制NSNotificationCenter的学习。最近写程序需要用到这类,研究了下,现把成果和大家分享。

NSNotificationCenter消息通信机制介绍(KVO)

来源网站:

**作用:**NSNotificationCenter是专门供程序中不同类间的消息通信而设置的.

注册通知:即要在什么地方接受消息

               [[NSNotificationCenter defaultCenter]  addObserver:self selector:@selector(mytest:) name:@" mytest" object:nil]; 

      参数介绍:

全球彩票平台,          addObserver: 观察者,即在什么地方接收通知;

        selector: 收到通知后调用何种方法;

        name: 通知的名字,也是通知的唯一标示,编译器就通过这个找到通知的。

发送通知:调用观察者处的方法。

           [[NSNotificationCenter defaultCenter] postNotificationName:@"mytest" object:searchFriendArray];

          参数:

         postNotificationName:通知的名字,也是通知的唯一标示,编译器就通过这个找到通知的。

                 object:传递的参数

注册方法的写法:

- (void) mytest:(NSNotification*) notification

{

   id obj = [notification object];//获取到传递的对象

 

附:注册键盘升启关闭消息

  1. //键盘升起 
  2. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
  3. //键盘降下
  4. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];

看一个程序,里面viewDidLoad中有
    NSNotificationCenter  *center = [NSNotificationCenter defaultCenter];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"saveMessage" object:nil];
    [center addObserver:self selector:@selector(saveMessage) name:@"saveMessage" object:nil];

不明白为什么先去掉注册者,然后又添加?不是同一个observer吗?

消息傳送机构:举例说明

在有需要的类中,发送消息

//发送消息出去,这里的对象是一个数组:saveImageArray

[[NSNotificationCenter defaultCenter] postNotificationName:@"postData" object:saveImageArray];

所有亲朋好友给我给包(发送消息),,,

    

//注册一个observer来响应消息的传送

[[NSNotificationCenter defaultCenter] addObserver:self

                                             selector:@selector(PostImage:)//接收消息方法

                                                 name:@"postData"//消息识别名称

                                               object:nil];

                                               

举个例子,过年了,准备一个大的钱包(注册一个OBserver),嘿嘿,,,,                                               

            

                

                                   

                        

//实现方法            

-(void)PostImage:(NSArray *)array

{

    //接收传送过来的消息

}        

我把红包都收起来,(接收消息)            

                

                

                    

                                               

//移除observer                                           

[[NSNotificationCenter defaultCenter] removeObserver:self name:@"postData" object:nil];

红包都收完了,哈哈,亲朋好友回家咯。。

简单说明,哈哈,不需要理解太复杂。。。。

例说明:KVC用来传送消息,是很不错的。

//kvo注册以parserDatas为例说明:parserDatas是一个解析XML的类

[parserDatas addObserver:self forKeyPath:@"isFinished"    options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld) context:parserDatas];

//接收变更通知

- (void)observeValueForKeyPath:(NSString *)keyPath

                      ofObject:(id)object

                        change:(NSDictionary *)change

                       context:(void *)context{

    

    if ([keyPath isEqual:@"isFinished"]) {

        BOOL isFinished=[[change objectForKey:NSKeyValueChangeNewKey] intValue];

        if (isFinished) {//如果服务器数据接收完毕

            

            NSMutableArray *array = [[NSMutableArray alloc] init];

            [array addObjectsFromArray:parserDatas.parsedDataArray];

            //保存数据

            [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];

            NSString *path = [DOCUMENT_PATH stringByAppendingPathComponent:@"AllXmlDataArray.bin"];

            [NSKeyedArchiver archiveRootObject:array toFile:path];

            [array release];

            //取消kvo注册

            [object removeObserver:self

                     forKeyPath:@"isFinished"];

        }      

    }else{

        // be sure to call the super implementation

        // if the superclass implements it

        [super observeValueForKeyPath:keyPath

                             ofObject:object

                               change:change

                              context:context];

    }

}

在parserDatas类中定义:

(BOOL):(NSString*)key

{

    //当这两个值改变时,使用自动通知已注册过的观察者,观察者需要实现observeValueForKeyPath:ofObject:change:context:方法

    if ([key isEqualToString:@"isFinished"])

    {

        return YES;

    }

    return [super automaticallyNotifiesObserversForKey:key];

}

发送变更通知:

在需要跟踪消息记录的函数中加入:

[self setValue:[NSNumber numberWithBool:YES] forKey:@"isFinished"];

   

 [[NSNotificationCenter defaultCenter] removeObserver:self name:@"saveMessage" object:nil];

不用的时候,才注销掉的。。

一般放在dealloc....里面。

在用之前把notification注册掉,是为了防止多次注册,这一般是因为这个view在程序运行时要load很多次,比如 Three20的非顶层的View每次显示的时候都重新load,这样如果不在用之前把notification注册掉,就会重复注册消息,比如每次接收 到消息就打印一句话,当你打开了n次这个view的时候,这句话就会打印n次...

- (void)awakeFromNib{

[[NSNotificationCenter defaultCenter] addObserver:self

selector:@selector(switchViews:)

name:@"switchViews"

  object:nil];

}

 

- (void)switchViews:(NSNotification*)notification{

NSNumber *viewNumber = [notification object];

NSInteger i = [viewNumber integerValue];

[self setSelectedSegmentIndex:i];

UIView *chosenView = nil;

switch (i) {

case 0:

chosenView = view1;

break;

case 1:

chosenView = view2;

break;

case 2:

chosenView = view3;

break;

default:

break;

}

if (chosenView) {

[[viewController view] bringSubviewToFront:chosenView];

}

}

 

- (void)dealloc{

[super dealloc];

[[NSNotificationCenter defaultCenter] removeObserver:self];

}

 

@end

现在发通知的viewController中

  • 基本概念

    1. 它是一种可以直接通过字符串类型的属性名来访问某个类属性的机制。而不是通过调用Setter、Getter方法访问。

    2. 所有NSObject对象都可以使用KVC。

    3. KVC既支持带有对象值的属性,也支持基本数据类型和结构。基本数据类型会被自动封装和解装。

  • 基本使用

    1. 通过 setValue: forKey: 设置对象的值。

    2. 通过 valueForKey: 获得对象的值。

    3. 通过 setValue: forKeyPath: 设置指定路径的对象值。

    4. 通过 valueForKeyPath: 获得指定路径的对象值。

一、KVC

NSNotificationCenter是专门供程序中不同类间的消息通信而设置的,使用起来极为方便,

NSDictionary * dict = [[NSDictionary alloc] initWithObjectsAndKeys:tf.text,@"textField",nil];

示例代码如下:

====基本概念

长话短说。

[[NSNotificationCente rdefaultCenter] postNotificationName:@"name" object:self userInfo:dict];

```objc //Person.h@interface Person : NSObject@property (nonatomic, copy) NSString *name;@property (nonatomic, assign) NSInteger age;@property (nonatomic, strong) Person *girlFriend;@property (nonatomic, copy) NSArray *books;@end``` ```objc - viewDidLoad { [super viewDidLoad]; Person *person = [[Person alloc] init]; NSLog(@"1: %@ - %ld", person.name, person.age); [person setValue:@"Bourne" forKey:@"name"]; [person setValue:@21 forKey:@"age"]; NSLog(@"2: %@ - %ld", [person valueForKey:@"name"], person.age); Person *girl = [[Person alloc] init]; [person setValue:girl forKey:@"girlFriend"]; NSLog(@"3: %@ - %ld", [person valueForKeyPath:@"girlFriend.name"], person.girlFriend.age); [person setValue:@"willYou?" forKeyPath:@"girlFriend.name"]; [person setValue:@20 forKeyPath:@"girlFriend.age"]; NSLog(@"4: %@ - %ld", person.girlFriend.name, person.girlFriend.age);}``` **打印输出** ```2015-04-06 16:49:19.192 KVC-KVO-test[5685:7429728] 1:  - 02015-04-06 16:49:19.193 KVC-KVO-test[5685:7429728] 2: Bourne - 212015-04-06 16:49:19.194 KVC-KVO-test[5685:7429728] 3:  - 02015-04-06 16:49:19.194 KVC-KVO-test[5685:7429728] 4: willYou? - 20``` 

它是一种可以直接通过字符串类型的属性名来访问某个类属性的机制。而不是通过调用Setter、Getter方法访问。

设置通知,就是说要在什么地方哪个类)接受通知,一般在初始化中做。

然后在要显示的viewController中

  • 一对多关系

    1. 如果向NSArray等集合类型数据所包含的对象发送请求消息,它会查询数组中每个对象来查找这个键值,并返回一个打包后的数组。

    2. 如果想要向数组等集合类型的数据所包含的对象发送赋值消息,它也会查询数组中每个对象来查找这个键值,并赋同一个值。注意:不要企图发送一个数组让她为找到的对象按顺序赋值,这样会报错!

    示例代码如下

    //Book.h@interface Book : NSObject@property (nonatomic, assign) NSInteger price;@end
    
    - setAndGetBooks { Person *person = [[Person alloc] init]; Book *book1 = [[Book alloc] init]; Book *book2 = [[Book alloc] init]; Book *book3 = [[Book alloc] init]; NSArray *myBooks = @[book1, book2, book3]; [person setValue:myBooks forKey:@"books"]; NSLog(@"1: %@", [person valueForKeyPath:@"books.price"]); [person setValue:@1 forKeyPath:@"books.price"]; NSLog(@"2: %@", [person valueForKeyPath:@"books.price"]);}
    

    打印输出

     2015-04-06 17:12:48.256 KVC-KVO-test[5886:7519923] 1: 2015-04-06 17:12:48.257 KVC-KVO-test[5886:7519923] 2: 
    

所有NSObject对象都可以使用KVC。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(test:) name:@"test" object:nil];  

注册通知:

KVC既支持带有对象值的属性,也支持基本数据类型和结构。基本数据类型会被自动封装和解装。

我仅对以上参数做以说明:addObserver 这个是观察者,就是说 在什么地方接收通知;

[[NSNotificationCenter defaultCenter] addObserver:selfselector:@selector(done:) name:@"name" object:nil];

  • 基本概念

    1. KVO: Key-Value Observing,它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知。就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知相应的观察者。属于一种非正式的 Protocol。

    2. 可以观察任意属性,包括基本数据类型,对一或对多关系。对多关系的观察者将会被告知发生变化的类型,也即使任意发生变化的对象。

  • 使用方法

    1. 注册观察者,指定被观察者的属性。

    2. 实现回调方法,接收变更通知。

    3. 移除观察者身份。

  • 注册观察者

    为了正确接收属性的变更通知,观察者必须首先发送一个 addObserver:forKeyPath:options:context: 消息给被观察者。用以传送需要观察的对象和需要观察的属性的关键路径,选型参数指定了发生变更时提供给观察者的信息,使用 NSKeyValueObservingOptionNew 可以在回调方法中获得旧值,使用 NSKeyValueObservingOptionOld 可以在回调方法中获得新值。

    示例

    [person addObserver:self forKeyPath:@"books.price" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:NULL];
    
  • 回调方法

    当监听属性发生变化时,坚挺着将会收到一条 observeValueForKeyPath: ofObject: change: context: 消息。触发观察的对象、键路径、包含变化细节的字典都会传给观察者。

     -observeValueForKeyPath:(NSString *)keyPath ofObject:object change:(NSDictionary *)change context:context { if([keyPath isEqualToString:@"books.price"]) { NSLog; } } 
    
  • 移除观察者

    你可以发送一条包含观察者,键路径的方法 `` 给被观察的对象,来移除这个观察。注意:注册了观察者就需要手动移除观察者!

    [person removeObserver:self forKeyPath:@"books.price"];
    

====基本使用

selector 这个是收到通知后,调用何种方法;

添加观察者之后,一定要在dealloc里面记得移除。

1.通过 setValue: forKey: 设置对象的值。

name: 这个是通知的名字,也是通知的唯一标示,编译器就通过这个找到通知的。

显示:

  • 概述

    与KVO不同的是,KVO在属性上通过 K-V 发生改变时,自动调用 observeValueForKeyPath: ofObject: change: context: 方法,而 NSNotification 在需要的时候自行发送通知才调用,且方法自定义。

  • 使用方法

    1. NSNotificationCenter 注册观察者时指定事件,及该事件触发时该执行的 Selector 或 Block

    2. NSNotificationCenter 在某个时机激发事件

      注意:编译器根据这个事件的名字找到之前注册过这个名字的观察者,所以这个名字一般设置成静态属性,保证两次使用是同一个字符串!

    3. 观察者在收到感兴趣的事件时,执行相应的 Selector 或 Block

  • 注册观察者

    使用默认的通知中心,指定观察者、需要接收的通知名称、接收通知时执行的方法,最后一个参数是表示会对哪个发送者对象发出的事件作出响应,nil 时表示接受所有发送者的事件。

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector name:@"NOTIFICATION_NAME" object:nil];
    
  • 激发观察者

    需要指定通知的名称,编译器根据这个事件的名字找到之前注册过这个名字的观察者,还可以指定传给观察者的对象。

    NSObject *test = [[NSObject alloc] init]; [[NSNotificationCenter defaultCenter] postNotificationName:@"NOTIFICATION_NAME" object:test]; //或者以下的方式: NSNotification *notification = [NSNotification notificationWithName:@"NOTIFICATION_NAME" object:test]; [[NSNotificationCenter defaultCenter] postNotification:notification];
    
  • 执行事件

    观察者接受到通知后就会执行注册时指定的方法,并获得被观察者传回的对象。

    - action:(NSNotification *)notification { NSLog;} 
    

2.通过 valueForKey: 获得对象的值。

发送通知,就是说此时要调用观察者处的方法。

NSDictionary* dict =[notification userInfo];

声明

  1. 以上内容属于本人整理的笔记,如有错误的地方希望能告诉我,大家共同进步。

  2. 以上内容有些段落或语句可能是本人从其他地方Copy而来,如有侵权,请及时告诉我。

3.通过 setValue: forKeyPath: 设置指定路径的对象值。

[[NSNotificationCenter defaultCenter] postNotificationName:@"test" object:searchFriendArray]; 

label.text= [dict objectForKey:@"textField"];

4.通过 valueForKeyPath: 获得指定路径的对象值。

我仅对以上参数做以说明:

通知 NSNotificationCenter

示例代码如下:

postNotificationName:通知的名字,也是通知的唯一标示,编译器就通过这个找到通知的。

发送通知:调用观察者处的方法。

全球彩票平台 1全球彩票平台 2

object:传递的参数

[[NSNotificationCenter defaultCenter] postNotificationName:@"mytest" object:searchFriendArray];

打印输出:

发送通知时,默认调用test方法。

参数:

全球彩票平台 3====一对多关系

本文由全球彩票平台发布于全球彩票平台操作系统,转载请注明出处:全球彩票平台通知的运用,请告诉我

TAG标签: 全球彩票平台
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。