09 - 알림

2683 단어

1、NSNotification


이 종류는 하나의 메시지 대상으로 이해할 수 있는데, 그 중에는 세 개의 구성원 변수가 있다.
  • 이 구성원 변수는 이 메시지 대상의 유일한 표식으로 메시지 대상을 판별하는 데 사용된다.@property (readonly, copy) NSString *name;
  • 이 구성원 변수는 하나의 대상을 정의하고 특정한 대상을 대상으로 하는 소식으로 이해할 수 있다.@property (readonly, retain) id object;
  • 이 구성원 변수는 사전으로 값을 전달할 수 있다.@property (readonly, copy) NSDictionary *userInfo;

  • NSNotification을 초기화하는 방법:

  • - (instancetype)initWithName:(NSString *)name object:(id)object userInfo:(NSDictionary *)userInfo;
  • + (instancetype)notificationWithName:(NSString *)aName object:(id)anObject;
  • + (instancetype)notificationWithName:(NSString *)aName object:(id)anObject userInfo:(NSDictionary *)aUserInfo;

  • 주의: 공식 문서에 명확한 설명이 있으니 init로 초기화할 수 없습니다

    2、NSNotificationCenter


    이 클래스는 하나의 알림 센터로, 단일 디자인을 사용하면 모든 응용 프로그램에 기본 알림 센터가 있습니다.알림의 발송을 스케줄링하는 데 사용됩니다.
  • 관찰자를 추가하면 방법, 이름과 대상을 지정할 수 있습니다.알림을 받았을 때 실행 방법.
  • - (void)addObserver:(id)observer selector:(SEL)aSelector name:(NSString *)aName object:(id)anObject;
  • 알림 메시지를 보내는 방법
  • - (void)postNotification:(NSNotification *)notification; - (void)postNotificationName:(NSString *)aName object:(id)anObject; - (void)postNotificationName:(NSString *)aName object:(id)anObject userInfo:(NSDictionary *)aUserInfo;
  • 관찰자를 제거하는 방법
  • - (void)removeObserver:(id)observer; - (void)removeObserver:(id)observer name:(NSString *)aName object:(id)anObject;

    몇 가지 참고 사항:


    1. 발송한 통지가 object 대상을 지정하면 관찰자가 받은 통지 설정의 object 대상은 그와 같이 통지를 받을 수 있지만 통지를 받을 때 이 파라미터를 nil로 설정하면 모든 통지를 받을 수 있다.
    2. 관찰자SEL 함수 바늘은 하나의 매개 변수를 가질 수 있다. 매개 변수는 바로 발송된 사오시 대상 자체이고 이 매개 변수를 통해 메시지 대상의userInfo를 추출하여 값을 전달할 수 있다.

    공지 사용 프로세스

  • 1. 통지를 보내야 하는 곳에 통지
  • 를 보낸다.
    NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
    [center postNotificationName:MSA_LOGIN_NOTIFICATION object:nil userInfo:@{@"errorCode" : @0 , @"ticket" : model.authTicket}];
    
  • 2, 통지 받기
  •  NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
     [center addObserver:self selector:@selector(verifySSOTicket:) name:MSA_LOGIN_NOTIFICATION object:nil];
    
    //     (          )
    - (void)verifySSOTicket:(NSNotification *)notic
    {
        NSLog(@"notic:%@", notic.userInfo);
        ViewController *vc = [[ViewController alloc] init];
        self.window.rootViewController = vc;
    }
    

    좋은 웹페이지 즐겨찾기