Annotation of Examples/EnterpriseObjects/SHLExamples/KeyValueCoding/Catalog.m, revision 1.1.1.1

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.