|
|
1.1 ! root 1: /*-------------------------------------------------------------------------- ! 2: * ! 3: * You may freely copy, distribute, and reuse the code in this example. ! 4: * SHL Systemhouse disclaims any warranty of any kind, expressed or ! 5: * implied, as to its fitness for any particular use. ! 6: * ! 7: * Catalog ! 8: * ! 9: * Inherits From: NSObject ! 10: * ! 11: * Conforms To: None ! 12: * ! 13: * Declared In: Catalog.h ! 14: * ! 15: *------------------------------------------------------------------------*/ ! 16: #import "Catalog.h" ! 17: #import "AppController.h" ! 18: ! 19: ! 20: #define print_trace(arg,isSet) [[NXApp delegate] perform: \ ! 21: @selector(console:) withObject: \ ! 22: [NSArray arrayWithObjects:arg, \ ! 23: [NSValue value:&isSet withObjCType:"char"], nil]] ! 24: #define display(arg, isSet) [[NXApp delegate] perform: \ ! 25: @selector(display:) withObject: \ ! 26: [NSArray arrayWithObjects:arg, \ ! 27: [NSValue value:&isSet withObjCType:"char"], nil]] ! 28: ! 29: ! 30: #define ACCESSOR_SET_TEXT "\n\n\n\n\(1) takeValuesFromDictionary:\n\ ! 31: (2) %s\n������������������������>" ! 32: #define ACCESSOR_GET_TEXT "\n\n\n\n(1) valuesForKeys:\n\ ! 33: (2) %s\n<������������������������" ! 34: #define IVAR_SET_TEXT "(1) takeValuesFromDictionary:\n\ ! 35: (2) matched instance variable\n������������������������>" ! 36: #define IVAR_GET_TEXT "(1) valuesForKeys:\n\ ! 37: (2) matched instance variable\n<������������������������" ! 38: #define KVC_SET_TEXT "\n\n\n(1) takeValuesFromDictionary:\n\ ! 39: ������������������������>" ! 40: #define KVC_GET_TEXT "\n\n\n(1) valuesForKeys:\n\ ! 41: <������������������������" ! 42: ! 43: ! 44: ! 45: ! 46: @implementation Catalog ! 47: ! 48: /*-------------------------------------------------------------------------- ! 49: * Initializing ! 50: *------------------------------------------------------------------------*/ ! 51: - (void) dealloc ! 52: { ! 53: if (fullname) [fullname release]; ! 54: if (price) [price release]; ! 55: if (volumeTitle) [volumeTitle release]; ! 56: return [super dealloc]; ! 57: } ! 58: ! 59: ! 60: /*-------------------------------------------------------------------------- ! 61: * Accessor methods ! 62: *------------------------------------------------------------------------*/ ! 63: - authorName ! 64: { ! 65: return fullname; ! 66: } ! 67: ! 68: ! 69: - volumeTitle ! 70: { ! 71: return volumeTitle; ! 72: } ! 73: ! 74: ! 75: - price ! 76: { ! 77: id newString, formatString; ! 78: BOOL isSet = NO; ! 79: ! 80: formatString = [NSString stringWithCString: ACCESSOR_GET_TEXT]; ! 81: newString = [NSString stringWithFormat: formatString, sel_getName(_cmd)]; ! 82: ! 83: print_trace(@"(1) valuesForKeys:\n(2) price\n", isSet); ! 84: display(newString, isSet); ! 85: ! 86: return price; ! 87: } ! 88: ! 89: ! 90: - setPrice: aPrice ! 91: { ! 92: id newString, formatString; ! 93: BOOL isSet = YES; ! 94: ! 95: /*-------------------------------------------------------------------------- ! 96: * the class check is to work around an association bug where different ! 97: * objects are passed in when value is read from the dataStore vs. when it ! 98: * is read from the user interface. ! 99: *------------------------------------------------------------------------*/ ! 100: if ([aPrice isKindOfClass: [NSNumber class]]) ! 101: price = [[NSNumber numberWithDouble: ! 102: ([aPrice doubleValue] + 10.0)] retain]; ! 103: else price = [[NSNumber numberWithFloat: [aPrice floatValue]] retain]; ! 104: ! 105: ! 106: formatString = [NSString stringWithCString: ACCESSOR_SET_TEXT]; ! 107: newString = [NSString stringWithFormat: formatString, sel_getName(_cmd)]; ! 108: ! 109: [[NXApp delegate] updateObjectView:self]; ! 110: print_trace(@"(1) takeValuesFromDictionary:\n(2) setPrice:\n", isSet); ! 111: display(newString, isSet); ! 112: ! 113: return self; ! 114: } ! 115: ! 116: ! 117: /*-------------------------------------------------------------------------- ! 118: * Key Value Coding protocol ! 119: *------------------------------------------------------------------------*/ ! 120: - (BOOL)takeValuesFromDictionary:(NSDictionary *)dictionary ! 121: { ! 122: id object, newString; ! 123: BOOL isSet = YES; ! 124: ! 125: [super takeValuesFromDictionary: dictionary]; ! 126: ! 127: /*-------------------------------------------------------------------------- ! 128: * instance variables were set in the call to super, but could not be ! 129: * displayed visually. we'll do it now. ! 130: *------------------------------------------------------------------------*/ ! 131: if ((object = [dictionary objectForKey: @"fullname"])) { ! 132: newString = [NSString stringWithCString: IVAR_SET_TEXT]; ! 133: ! 134: [[NXApp delegate] updateObjectView:self]; ! 135: print_trace( ! 136: @"(1) takeValuesFromDictionary:\n(2) matched instance variable\n", ! 137: isSet); ! 138: display(newString, isSet); ! 139: } ! 140: ! 141: /*-------------------------------------------------------------------------- ! 142: * any key/value pairs that are handled outside of the accessor / ivar ! 143: * paradigm must be handled here. ! 144: *------------------------------------------------------------------------*/ ! 145: if ((object = [dictionary objectForKey: @"title"])) { ! 146: volumeTitle = [object retain]; ! 147: ! 148: newString = [NSString stringWithCString: KVC_SET_TEXT]; ! 149: ! 150: [[NXApp delegate] updateObjectView:self]; ! 151: print_trace(@"(1) takeValuesFromDictionary:\n", ! 152: isSet); ! 153: display(newString, isSet); ! 154: } ! 155: ! 156: print_trace(@"���������\n", isSet); ! 157: return YES; ! 158: } ! 159: ! 160: ! 161: - (NSDictionary *)valuesForKeys:(NSArray *)keys ! 162: { ! 163: id dictionary, newString; ! 164: BOOL isSet = NO; ! 165: ! 166: ! 167: dictionary = [super valuesForKeys:keys]; ! 168: ! 169: /*-------------------------------------------------------------------------- ! 170: * all instance variables were set in a call to super, but could not ! 171: * be displayed. we'll do it now. ! 172: *------------------------------------------------------------------------*/ ! 173: if ([keys containsObject: @"fullname"]) { ! 174: newString = [NSString stringWithCString: IVAR_GET_TEXT]; ! 175: print_trace(@"(1) valuesForKeys:\n(2) matched instance variable\n", ! 176: isSet); ! 177: display(newString, isSet); ! 178: } ! 179: ! 180: ! 181: /*-------------------------------------------------------------------------- ! 182: * any key / value pairs that are not handled via accessors or ivars ! 183: * can be specially handled here. we'll display that now. ! 184: *------------------------------------------------------------------------*/ ! 185: if ([keys containsObject: @"title"]) { ! 186: [dictionary setObject: volumeTitle forKey: @"title"]; ! 187: ! 188: newString = [NSString stringWithCString: KVC_GET_TEXT]; ! 189: ! 190: print_trace(@"(1) valuesForKeys:\n", isSet); ! 191: display(newString, isSet); ! 192: } ! 193: ! 194: print_trace(@"���������\n", isSet); ! 195: ! 196: return dictionary; ! 197: } ! 198: ! 199: ! 200: @end
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.