Annotation of Examples/EnterpriseObjects/SHLExamples/KeyValueCoding/Catalog.m, revision 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.