Using Notifications(Chapter 14 of Cocoa Programming for Mac OS X)
PreferenceController1 #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]