// // SectionDictionary.m // PicCast // // Created by Matthew Handler on 4/23/11. // Copyright 2011 Earl Industries. All rights reserved. // #import "SectionDictionary.h" @implementation SectionDictionary //@synthesize index; - (SectionDictionary *) init { index = 0; sortedKeys = [[[NSMutableArray alloc] init] retain]; indexMap = [[[NSMutableDictionary alloc] init] retain]; theRealDictionary = [[[NSMutableDictionary alloc] init] retain]; [super init]; return self; } - (id)forwardingTargetForSelector:(SEL)aSelector { return theRealDictionary; } - (void) sortKeys { [sortedKeys sortUsingComparator:(NSComparator)^(id obj1, id obj2){ return [obj2 compare:obj1]; }]; } - (void) setObject:(id)anObject forKey:(id)aKey { // [indexMap setObject:aKey forKey:[NSString stringWithFormat:@"%d", index]]; // index++; [theRealDictionary setObject:anObject forKey:aKey]; [sortedKeys addObject:aKey]; [self sortKeys]; } - (NSArray *) allIndices { NSLog(@"%@ %@", [indexMap allKeys], [indexMap allValues]); return [indexMap allKeys]; } // lets you push objects into sections without worry about storage - (void) appendObject:(id)anObject forKey:(id)aKey { NSMutableArray *store = [theRealDictionary objectForKey:aKey]; if (store == nil) { // [indexMap setObject:aKey forKey:[NSString stringWithFormat:@"%d", index]]; // index++; NSMutableArray *store = [[[NSMutableArray alloc] init] autorelease]; [store addObject:anObject]; [theRealDictionary setObject:store forKey:aKey]; [sortedKeys addObject:aKey]; [self sortKeys]; } else [store addObject:anObject]; //NSLog(@"number of rows: %d", [[theRealDictionary objectForKey:aKey] count]); } - (id) objectForIndex:(NSInteger)i { return [theRealDictionary objectForKey:[sortedKeys objectAtIndex:i]]; //return [theRealDictionary objectForKey:[indexMap objectForKey:[NSString stringWithFormat:@"%d", i]]]; } - (NSString *) keyForIndex:(NSInteger)i { return [sortedKeys objectAtIndex:i]; //return [indexMap objectForKey:[NSString stringWithFormat:@"%d", i]]; } - (void) dealloc { [sortedKeys release]; [theRealDictionary release]; [indexMap release]; [super dealloc]; } @end