佘小宝的爹 发表于 2015-12-30 14:55:30

Using Notifications(Chapter 14 of Cocoa Programming for Mac OS X)

PreferenceController

1 #import "PreferenceController.h"
2
3
4 @implementation PreferenceController
5
6 NSString * const BNRTableBgColorKey = @"TableBackgroundColor";
7 NSString * const BNREmptyDocKey = @"EmptyDocuementFlag";
8 NSString * const BNRColorChangedNotification = @"BNRColorChanged";
9
10 - (id)init
11 {
12   if(!)
13   {
14         return nil;
15   }
16   
17   return self;
18 }
19
20 - (NSColor *)tableBgColor
21 {
22   NSUserDefaults *defaults = ;
23   NSData *colorAsData = ;
24   return ;
25 }
26
27 - (BOOL)emptyDoc
28 {
29   NSUserDefaults *defaults = ;
30   return ;
31 }
32
33
34 - (void)windowDidLoad
35 {
36   ];
37   ];
38   NSLog(@"Nib file is loaded");
39 }
40
41 - (IBAction)changeBackgroundColor:(id)sender
42 {
43   NSColor *color = ;
44   NSData *colorAsData = ;
45   NSUserDefaults *defaults = ;
46   ;
47   NSLog(@"Color changed: %@", color);
48   
49   NSNotificationCenter *nc = ;
50   NSLog(@"Sending notification");
51   NSDictionary *d = ;
52   ;
53 }
54
55 - (IBAction)changeNewEmptyDoc:(id)sender
56 {
57   int state = ;
58   NSUserDefaults *defaults = ;
59   ;
60   NSLog(@"Checkbox changed %d", state);
61 }
62
63 @end  

MyDocument

1 #import "PreferenceController.h"
2 #import "MyDocument.h"
3 #import "Person.h"
4
5 @implementation MyDocument
6
7 - (id)init
8 {
9   if (!)
10   {
11         return nil;
12   }
13   
14   employees = [ init];
15   
16   NSNotificationCenter *nc = ;
17   ;
18   NSLog(@"Registered with notification center");
19   return self;
20 }
21
22 - (void)dealloc
23 {
24   ;
25   NSNotificationCenter *nc = ;
26   ;
27   ;
28 }
29
30 - (void)handleColorChange:(NSNotification *)note
31 {
32   NSLog(@"Received notification: %@", note);
33   NSColor *color = [ objectForKey:@"color"];
34   ;
35 }
36
37 - (void)setEmployees:(NSMutableArray *)a
38 {
39   if(a == employees)
40   {
41         return;
42   }
43   
44   for(Person *person in employees)
45   {
46         ;
47   }
48   
49   ;
50   ;
51   employees = a;
52   
53   for(Person *person in employees)
54   {
55         ;
56   }
57 }
58
59 - (void)insertObject:(Person *)p inEmployeesAtIndex:(int)index
60 {
61   NSLog(@"adding %@ to %@", p, employees);
62   NSUndoManager *undo = ;
63   [ removeObjectFromEmployeesAtIndex:index];
64   if(!)
65   {
66         ;
67   }
68   ;
69   ;
70 }
71
72 - (void)removeObjectFromEmployeesAtIndex:(int)index
73 {
74   Person *p = ;
75   NSLog(@"removing %@ from %@", p, employees);
76   NSUndoManager *undo = ;
77   [ insertObject:p inEmployeesAtIndex:index];
78   
79   if(!)
80   {
81         ;
82   }
83   ;
84   ;
85 }
86
87 - (void)startObservingPerson:(Person *)person
88 {
89   ;
90   ;
91 }
92
93 - (void)stopObservingPerson:(Person *)person
94 {
95   ;
96   ;
97 }
98
99 - (void)changeKeyPath:(NSString *)keyPath ofObject:(id)obj toValue:(id)newValue
100 {
101   ;
102 }
103
104 - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
105 {
106   NSUndoManager *undo = ;
107   id oldValue = ;
108   
109   if(oldValue == )
110   {
111         oldValue = nil;
112   }
113   
114   NSLog(@"oldValue = %@", oldValue);
115   [ changeKeyPath:keyPath ofObject:object toValue:oldValue];
116   ;
117 }
118
119 - (IBAction)createEmployee:(id)sender
120 {
121   NSWindow *w = ;
122   
123   BOOL editingEnded = ;
124   if(!editingEnded)
125   {
126         NSLog(@"Unable to end editing");
127         return;
128   }
129   
130   NSUndoManager *undo = ;
131   if ()
132   {
133         ;
134         ;
135   }
136   Person *p = ;
137   ;
138   ;
139   ;
140   
141   NSArray *a = ;
142   int row = ;
143   NSLog(@"starting edit of %@ in row %@", p, row);
144   ;
145 }
146
147 - (NSString *)windowNibName
148 {
149   // Override returning the nib file name of the document
150   // If you need to use a subclass of NSWindowController or if your document supports multiple NSWindowControllers, you should remove this method and override -makeWindowControllers instead.
151   return @"MyDocument";
152 }
153
154 - (void)windowControllerDidLoadNib:(NSWindowController *) aController
155 {
156   ;
157   NSUserDefaults *defautls = ;
158   NSData *colorAsData = ;
159   ];
160   // Add any code here that needs to be executed once the windowController has loaded the document's window.
161 }
162
163 - (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError
164 {
165   // Insert code here to write your document to data of the specified type. If the given outError != NULL, ensure that you set *outError when returning nil.
166
167   // You can also choose to override -fileWrapperOfType:error:, -writeToURL:ofType:error:, or -writeToURL:ofType:forSaveOperation:originalContentsURL:error: instead.
168
169   // For applications targeted for Panther or earlier systems, you should use the deprecated API -dataRepresentationOfType:. In this case you can also choose to override -fileWrapperRepresentationOfType: or -writeToFile:ofType: instead.
170
171   if ( outError != NULL ) {
172         *outError = ;
173   }
174   return nil;
175 }
176
177 - (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError **)outError
178 {
179   // Insert code here to read your document from the given data of the specified type.If the given outError != NULL, ensure that you set *outError when returning NO.
180
181   // You can also choose to override -readFromFileWrapper:ofType:error: or -readFromURL:ofType:error: instead.
182   
183   // For applications targeted for Panther or earlier systems, you should use the deprecated API -loadDataRepresentation:ofType. In this case you can also choose to override -readFromFile:ofType: or -loadFileWrapperRepresentation:ofType: instead.
184   
185   if ( outError != NULL ) {
186         *outError = ;
187   }
188   return YES;
189 }
190
191 @end  
  
页: [1]
查看完整版本: Using Notifications(Chapter 14 of Cocoa Programming for Mac OS X)