SlideShare a Scribd company logo
1 of 16
Download to read offline
Chapter 5
                Bit Academy
NSNotificationCenter &
                      NSNotification
               CandleDidChanged                                   addObserver: self
                                      uiUpdate               name:@”CandleDidChanged”

                                                                       object B


CandleDidChanged
                                                                   perform:@selector(uiUpdate:)

     post:@”CandleDidChanged”
                                           Notification                 object C
               object A                     Center

                                                                   addObserver: self
                                                              name:@”CandleDidChanged”

                   CandleDidChanged                                    object D
                                        candleUpdate

                                                         perform:@selector(candleUpdate:)
NSNotificationCenter Class
               Inherits from
               NSObject
               Conforms to
               NSObject (NSObject)
               Framework
               /System/Library/Frameworks/
               Foundation.framework
               Availability
               Available in iOS 2.0 and later.
               Companion guide
               Notification Programming Topics
               Declared in
               NSNotification.h

               A notification center maintains a notification dispatch table which
               specifies a notification set for a particular observer. A notification set is a
               subset of the notifications posted to the notification center. Each table entry
               contains three items:
                • Notification observer: Required. The object to be notified when
                  qualifying notifications are posted to the notification center.
                • Notification name: Optional. Specifying a name reduces the set of
                  notifications the entry specifies to those that have this name.
                • Notification sender: Optional. Specifying a sender reduces the set of
                  notifications the entry specifies to those sent by this object.
Class Method
               + (id)defaultCenter
               Return Value
               The current process’s default notification center,
               which is used for system notifications.
Instance Method
          - (void)addObserver:(id)notificationObserver selector:(SEL)
          notificationSelector name:(NSString *)notificationName object:(id)             - (void)postNotificationName:(NSString
          notificationSender                                                            *)notificationName object:(id)
          Parameters                                                                   notificationSender userInfo:(NSDictionary
          notificationObserver                                                          *)userInfo
          Object registering as an observer. This value must not be nil.
          notificationSelector                                                          Creates a notification with a given name, sender,
          Selector that specifies the message the receiver sends                        and information and posts it to the receiver.
          notificationObserver to notify it of the notification posting. The method
          specified by notificationSelector must have one and only one argument          Parameters
          (an instance of NSNotification).                                             notificationName
                                                                                       The name of the notification.
          notificationName
          The name of the notification for which to register the observer; that is,     notificationSender
          only notifications with this name are delivered to the observer.              The object posting the notification.
                                                                                       userInfo
          If you pass nil, the notification center doesn’t use a notification’s name
                                                                                       Information about the the notification. May be
          to decide whether to deliver it to the observer.                             nil.
          notificationSender
          The object whose notifications the observer wants to receive; that is, only
          notifications sent by this sender are delivered to the observer.
          If you pass nil, the notification center doesn’t use a notification’s sender
          to decide whether to deliver it to the observer.


                     - (void)postNotification:(NSNotification *)notification
                     Posts a given notification to the receiver.

                     Parameters
                     notification
                     The notification to post. This value must not be nil.
                     Discussion
                     You can create a notification with the NSNotification class method
                     notificationWithName:object: or notificationWithName:object:userInfo:. An
                     exception is raised if notification is nil.
Notification Class
               Inherits from
               NSObject                      Notification Class : NotificationCeneter
               Conforms to
               NSCoding
               NSCopying
               NSObject (NSObject)
               Framework
               /System/Library/Frameworks/Foundation.framework
               Availability
               Available in iOS 2.0 and later.
NSNotification Class Method

+ (id)notificationWithName:(NSString *)aName object:(id)anObject
Returns a new notification object with a specified name and object.

Parameters
aName : The name for the new notification. May not be nil.
anObject : The object for the new notification.

+ (id)notificationWithName:(NSString *)aName object:(id)anObject
userInfo:(NSDictionary *)userInfo
Returns a notification object with a specified name, object, and user information.

Parameters
aName : The name for the new notification. May not be nil.
anObject : The object for the new notification.
userInfo : The user information dictionary for the new
notification. May be nil.
NSNotification Instance Method

     - (NSString *)name

     The name of the notification. Typically you use this method to find out what kind of
     notification you are dealing with when you receive a notification.
     - (id)object(sender object)

     The object associated with the notification. This is often the object that posted this
     notification. It may be nil.
     Typically you use this method to find out what object a notification applies to when
     you receive a notification.

     - (NSDictionary *)userInfo

     Returns the user information dictionary associated with the receiver. May be nil.
     The user information dictionary stores any additional objects that objects receiving
     the notification might
     use.
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(uiUpdate:) name:@"CandleDidChanged" object:nil];




                                                  LightTheCandleAppDelegate

default center                                                                   observer
                 Observer            : LightTheCandleAppDelegate



      LightTheCandleAppDelegate.m                       applicationDidFinishLaunching
setCandleState   postNotification




                            IBAction toggleCandle          sender

                       !      UISwitch  mySwitch      UISwitch      sender;
                       !                	 
                       !      myCandle.candleState         mySwitch isOn ;

                        
                                    uiUpdate                 notification

                       !            myCandle candleState
                       !      !
                       !      !     candleImageView setImage myCandle.candleOnImage ;
                       !
                       !      !
                       !      !     candleImageView setImage myCandle.candleOffImage ;
                       !
Candle             candleState
      Candle                                              candleState setter        notification
                                              .
                                          candleState                    uiUpdate                notification

                setCandleState       newState                    !        myCandle candleState
                                                                 !   !
      !        candleState   newState;                           !   !       candleImageView setImage myCandle.candleOnImage ;
      !                          defaultCenter                   !
      !         postNotificationName                object   ;   !   !
                                                                 !   !       candleImageView setImage myCandle.candleOffImage ;
                                                                 !




                 candle                          NSNotification                         LightTheCandleAppDelegate
                 object                             center                                         object
Key Value Coding
               - applications to access the properties of an object
               indirectly by name (or key), rather than directly through
               invocation of an accessor method or as instance
               variables.
               - Key-value coding is a key technology when working
               with key-value observing
               - NSObject                    NSObject


               - NSDictionary


               BOOL candleStateValue = [myCandle candleState];
               [myCandle setCandleState:!candleStateValue];

               BOOL candleStateValue = myCandle.candleState;                      property
               myCandle.candleState = !candleStateValue;

               BOOL candleStateValue = [myCandle valueForKey: @”candleState”];               KVC
               [myCandle setValue : !candleStateValue forKey: @”candleState”];

                      KVC                      Candle               getter & setter
Key Value Observing
 -
 - NSObject          NSKeyValueObserving      KVO                NSObject


           observer
           [myCandle addObserver:self forKeyPath:@”candleState”
           options:NSKeyValueObservingOptionNew|NSKeyValueObservingOld context: nil];




- NSKeyValueObservingOptionNew :
- NSKeyValueObservingOptionOld :
- NSKeyValueObservingOptionInitial :                                                .
addObserver:forKeyPath:options:context:
- NSKeyValueObservingOptionPrior :      KVO
                                           .
Observing Method
                                             .
addObserver:                                               .

- (void) observerValueForKeyPath:(NSString *)keyPath ofObject: (id)object change:(NSDictionary*)change context:(void)context
{
    if([keyPath isEqualToString:@”candleState”])
    {
         // do something
    }
}
LightTheCandleAppDelegate.m
-applicationDidFinishLaunching
KVC
[myCandle setValue: candleOffImage forKey: @candleOffImage”];
[myCandle setValue: candleOnImage forKey: @candleOnImage”];
[myCandle setValue: [NSNumber numberWithBool:NO] forKey: @candleState”];

KVO
[myCandle addObserver:self forKeyPath: @”candleState” options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld
context : nil];

-dealloc
[myCandle removeObserver: self forKeyPath:@”candleState”];
IBAction toggleCandle   sender

               !      sender isKindOfClass UISwitch class
               ! !          newState    sender isOn ;
               ! !     myCandle setValue           numberWithBool newState
               forKey              ;
               !

                
                      observeValueForKeyPath            keyPath ofObject          object
               change              change context         context

               !      keyPath isEqualToString
               ! !         newState     change
               valueForKey NSKeyValueChangeNewKey boolValue ;
               ! !      newState
               ! ! !
               ! ! !      candleImageView setImage object
               valueForKey                 ;
               ! ! ! onOffSwitch.on            ;
               ! ! ! candleStateLabel.text              	  	   	    ;
               ! !
               ! ! !
               ! ! !      candleImageView setImage object
               valueForKey                  ;
               ! ! ! onOffSwitch.on           ;
               ! ! ! candleStateLabel.text              	  	  	         	    	    ;
               ! !
	    	    	    !

More Related Content

Similar to 아이폰강의(3)

Observer design pattern
Observer design patternObserver design pattern
Observer design patternSara Torkey
 
Distributing information on iOS
Distributing information on iOSDistributing information on iOS
Distributing information on iOSMake School
 
What's New in User Notifications Framework - WWDC16. Meetup @Wantedly with 日本...
What's New in User Notifications Framework - WWDC16. Meetup @Wantedly with 日本...What's New in User Notifications Framework - WWDC16. Meetup @Wantedly with 日本...
What's New in User Notifications Framework - WWDC16. Meetup @Wantedly with 日本...将之 小野
 
iOS NotificationCenter intro
iOS NotificationCenter introiOS NotificationCenter intro
iOS NotificationCenter introJintin Lin
 
From C++ to Objective-C
From C++ to Objective-CFrom C++ to Objective-C
From C++ to Objective-Ccorehard_by
 
Design patterns
Design patternsDesign patterns
Design patternsISsoft
 
iOS 101 - Xcode, Objective-C, iOS APIs
iOS 101 - Xcode, Objective-C, iOS APIsiOS 101 - Xcode, Objective-C, iOS APIs
iOS 101 - Xcode, Objective-C, iOS APIsSubhransu Behera
 

Similar to 아이폰강의(3) (8)

Observer design pattern
Observer design patternObserver design pattern
Observer design pattern
 
Distributing information on iOS
Distributing information on iOSDistributing information on iOS
Distributing information on iOS
 
Notifications
NotificationsNotifications
Notifications
 
What's New in User Notifications Framework - WWDC16. Meetup @Wantedly with 日本...
What's New in User Notifications Framework - WWDC16. Meetup @Wantedly with 日本...What's New in User Notifications Framework - WWDC16. Meetup @Wantedly with 日本...
What's New in User Notifications Framework - WWDC16. Meetup @Wantedly with 日本...
 
iOS NotificationCenter intro
iOS NotificationCenter introiOS NotificationCenter intro
iOS NotificationCenter intro
 
From C++ to Objective-C
From C++ to Objective-CFrom C++ to Objective-C
From C++ to Objective-C
 
Design patterns
Design patternsDesign patterns
Design patterns
 
iOS 101 - Xcode, Objective-C, iOS APIs
iOS 101 - Xcode, Objective-C, iOS APIsiOS 101 - Xcode, Objective-C, iOS APIs
iOS 101 - Xcode, Objective-C, iOS APIs
 

Recently uploaded

Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAndikSusilo4
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?XfilesPro
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 

Recently uploaded (20)

Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & Application
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
The transition to renewables in India.pdf
The transition to renewables in India.pdfThe transition to renewables in India.pdf
The transition to renewables in India.pdf
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 

아이폰강의(3)

  • 1. Chapter 5 Bit Academy
  • 2. NSNotificationCenter & NSNotification CandleDidChanged addObserver: self uiUpdate name:@”CandleDidChanged” object B CandleDidChanged perform:@selector(uiUpdate:) post:@”CandleDidChanged” Notification object C object A Center addObserver: self name:@”CandleDidChanged” CandleDidChanged object D candleUpdate perform:@selector(candleUpdate:)
  • 3. NSNotificationCenter Class Inherits from NSObject Conforms to NSObject (NSObject) Framework /System/Library/Frameworks/ Foundation.framework Availability Available in iOS 2.0 and later. Companion guide Notification Programming Topics Declared in NSNotification.h A notification center maintains a notification dispatch table which specifies a notification set for a particular observer. A notification set is a subset of the notifications posted to the notification center. Each table entry contains three items: • Notification observer: Required. The object to be notified when qualifying notifications are posted to the notification center. • Notification name: Optional. Specifying a name reduces the set of notifications the entry specifies to those that have this name. • Notification sender: Optional. Specifying a sender reduces the set of notifications the entry specifies to those sent by this object.
  • 4. Class Method + (id)defaultCenter Return Value The current process’s default notification center, which is used for system notifications.
  • 5. Instance Method - (void)addObserver:(id)notificationObserver selector:(SEL) notificationSelector name:(NSString *)notificationName object:(id) - (void)postNotificationName:(NSString notificationSender *)notificationName object:(id) Parameters notificationSender userInfo:(NSDictionary notificationObserver *)userInfo Object registering as an observer. This value must not be nil. notificationSelector Creates a notification with a given name, sender, Selector that specifies the message the receiver sends and information and posts it to the receiver. notificationObserver to notify it of the notification posting. The method specified by notificationSelector must have one and only one argument Parameters (an instance of NSNotification). notificationName The name of the notification. notificationName The name of the notification for which to register the observer; that is, notificationSender only notifications with this name are delivered to the observer. The object posting the notification. userInfo If you pass nil, the notification center doesn’t use a notification’s name Information about the the notification. May be to decide whether to deliver it to the observer. nil. notificationSender The object whose notifications the observer wants to receive; that is, only notifications sent by this sender are delivered to the observer. If you pass nil, the notification center doesn’t use a notification’s sender to decide whether to deliver it to the observer. - (void)postNotification:(NSNotification *)notification Posts a given notification to the receiver. Parameters notification The notification to post. This value must not be nil. Discussion You can create a notification with the NSNotification class method notificationWithName:object: or notificationWithName:object:userInfo:. An exception is raised if notification is nil.
  • 6. Notification Class Inherits from NSObject Notification Class : NotificationCeneter Conforms to NSCoding NSCopying NSObject (NSObject) Framework /System/Library/Frameworks/Foundation.framework Availability Available in iOS 2.0 and later.
  • 7. NSNotification Class Method + (id)notificationWithName:(NSString *)aName object:(id)anObject Returns a new notification object with a specified name and object. Parameters aName : The name for the new notification. May not be nil. anObject : The object for the new notification. + (id)notificationWithName:(NSString *)aName object:(id)anObject userInfo:(NSDictionary *)userInfo Returns a notification object with a specified name, object, and user information. Parameters aName : The name for the new notification. May not be nil. anObject : The object for the new notification. userInfo : The user information dictionary for the new notification. May be nil.
  • 8. NSNotification Instance Method - (NSString *)name The name of the notification. Typically you use this method to find out what kind of notification you are dealing with when you receive a notification. - (id)object(sender object) The object associated with the notification. This is often the object that posted this notification. It may be nil. Typically you use this method to find out what object a notification applies to when you receive a notification. - (NSDictionary *)userInfo Returns the user information dictionary associated with the receiver. May be nil. The user information dictionary stores any additional objects that objects receiving the notification might use.
  • 9. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(uiUpdate:) name:@"CandleDidChanged" object:nil]; LightTheCandleAppDelegate default center observer Observer : LightTheCandleAppDelegate LightTheCandleAppDelegate.m applicationDidFinishLaunching
  • 10. setCandleState postNotification IBAction toggleCandle sender ! UISwitch mySwitch UISwitch sender; ! ! myCandle.candleState mySwitch isOn ;   uiUpdate notification ! myCandle candleState ! ! ! ! candleImageView setImage myCandle.candleOnImage ; ! ! ! ! ! candleImageView setImage myCandle.candleOffImage ; !
  • 11. Candle candleState Candle candleState setter notification . candleState uiUpdate notification setCandleState newState ! myCandle candleState ! ! ! candleState newState; ! ! candleImageView setImage myCandle.candleOnImage ; ! defaultCenter ! ! postNotificationName object ; ! ! ! ! candleImageView setImage myCandle.candleOffImage ; ! candle NSNotification LightTheCandleAppDelegate object center object
  • 12. Key Value Coding - applications to access the properties of an object indirectly by name (or key), rather than directly through invocation of an accessor method or as instance variables. - Key-value coding is a key technology when working with key-value observing - NSObject NSObject - NSDictionary BOOL candleStateValue = [myCandle candleState]; [myCandle setCandleState:!candleStateValue]; BOOL candleStateValue = myCandle.candleState; property myCandle.candleState = !candleStateValue; BOOL candleStateValue = [myCandle valueForKey: @”candleState”]; KVC [myCandle setValue : !candleStateValue forKey: @”candleState”]; KVC Candle getter & setter
  • 13. Key Value Observing - - NSObject NSKeyValueObserving KVO NSObject observer [myCandle addObserver:self forKeyPath:@”candleState” options:NSKeyValueObservingOptionNew|NSKeyValueObservingOld context: nil]; - NSKeyValueObservingOptionNew : - NSKeyValueObservingOptionOld : - NSKeyValueObservingOptionInitial : . addObserver:forKeyPath:options:context: - NSKeyValueObservingOptionPrior : KVO .
  • 14. Observing Method . addObserver: . - (void) observerValueForKeyPath:(NSString *)keyPath ofObject: (id)object change:(NSDictionary*)change context:(void)context { if([keyPath isEqualToString:@”candleState”]) { // do something } }
  • 15. LightTheCandleAppDelegate.m -applicationDidFinishLaunching KVC [myCandle setValue: candleOffImage forKey: @candleOffImage”]; [myCandle setValue: candleOnImage forKey: @candleOnImage”]; [myCandle setValue: [NSNumber numberWithBool:NO] forKey: @candleState”]; KVO [myCandle addObserver:self forKeyPath: @”candleState” options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context : nil]; -dealloc [myCandle removeObserver: self forKeyPath:@”candleState”];
  • 16. IBAction toggleCandle sender ! sender isKindOfClass UISwitch class ! ! newState sender isOn ; ! ! myCandle setValue numberWithBool newState forKey ; !   observeValueForKeyPath keyPath ofObject object change change context context ! keyPath isEqualToString ! ! newState change valueForKey NSKeyValueChangeNewKey boolValue ; ! ! newState ! ! ! ! ! ! candleImageView setImage object valueForKey ; ! ! ! onOffSwitch.on ; ! ! ! candleStateLabel.text ; ! ! ! ! ! ! ! ! candleImageView setImage object valueForKey ; ! ! ! onOffSwitch.on ; ! ! ! candleStateLabel.text ; ! ! !