Created
October 3, 2011 04:57
-
-
Save todd1251/1258465 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#import <Foundation/Foundation.h> | |
#define kPreviousSearchEntityKey @"PreviousSearchEntity" | |
#define kPreviousSearchKey @"PreviousSearch" | |
#define kIDKey @"ID" | |
#define kTextKey @"Text" | |
#define kCategoryKey @"Category" | |
#define kCategoryIdentifierKey @"CategoryIdentifierKey" | |
@interface SearchParameterEntity : NSObject | |
@property (nonatomic, retain) NSMutableDictionary *parameters; | |
@end | |
@implementation SearchParameterEntity | |
@synthesize parameters; | |
- (void) encodeWithCoder:(NSCoder*)encoder | |
{ | |
//encode all the values so they can be persisted in NSUserdefaults | |
if (parameters) | |
[encoder encodeObject:parameters forKey:kPreviousSearchEntityKey]; //GDB:Interrupted! | |
} | |
- (id) initWithCoder:(NSCoder*)decoder | |
{ | |
if (self = [super init]) | |
{ | |
//decode all values to return an object from NSUserdefaults in the same state as when saved | |
[self setParameters:[decoder decodeObjectForKey:kPreviousSearchEntityKey]]; | |
} | |
return self; | |
} | |
- (void) dealloc { | |
[parameters release]; | |
[super dealloc]; | |
} | |
@end | |
@interface CategoryEntity : NSObject | |
@property (nonatomic, retain) NSString *ID; | |
@property (nonatomic, retain) NSString *text; | |
@property (nonatomic, retain) NSString *category; | |
@property (nonatomic, retain) NSString *categoryIdentifierKey; | |
@end | |
@implementation CategoryEntity | |
@synthesize ID; | |
@synthesize text; | |
@synthesize category; | |
@synthesize categoryIdentifierKey; | |
- (void) encodeWithCoder:(NSCoder*)encoder | |
{ | |
//encode all the values so they can be persisted in NSUserdefaults | |
[encoder encodeObject:ID forKey:kIDKey]; | |
[encoder encodeObject:text forKey:kTextKey]; | |
[encoder encodeObject:category forKey:kCategoryKey]; | |
[encoder encodeObject:categoryIdentifierKey forKey:kCategoryIdentifierKey]; | |
} | |
- (id) initWithCoder:(NSCoder*)decoder | |
{ | |
if (self = [super init]) { | |
//decode all values to return an object from NSUserdefaults in the same state as when saved | |
[self setID:[decoder decodeObjectForKey:kIDKey]]; | |
[self setText:[decoder decodeObjectForKey:kTextKey]]; | |
[self setCategory:[decoder decodeObjectForKey:kCategoryKey]]; | |
[self setCategoryIdentifierKey:[decoder decodeObjectForKey:kCategoryIdentifierKey]]; | |
} | |
return self; | |
} | |
- (void) dealloc { | |
[ID release]; | |
[text release]; | |
[category release]; | |
[categoryIdentifierKey release]; | |
[super dealloc]; | |
} | |
@end | |
@interface NSUserDefaultsWrapper : NSUserDefaults | |
@end | |
@implementation NSUserDefaultsWrapper | |
+ (id) defaults { | |
return [self standardUserDefaults]; | |
} | |
+ (void) setPreviousSearchParameters:(SearchParameterEntity*) entity | |
{ | |
if (entity) | |
{ | |
//first encode the entity (implements the NSCoding protocol) then save it | |
NSData *encodedObject = [NSKeyedArchiver archivedDataWithRootObject:entity]; | |
NSLog(@"setting defaults, encodedObject = %@", encodedObject); | |
[[self defaults] setObject:encodedObject forKey:kPreviousSearchKey]; | |
[[self defaults] synchronize]; | |
} | |
} | |
+ (SearchParameterEntity*) getPreviousSearchParameters | |
{ | |
//retrieve the encoded NSData object that was saved, decode and return it | |
SearchParameterEntity *entity = nil; | |
NSData *encodedObject = [[self defaults] objectForKey:kPreviousSearchKey]; | |
NSLog(@"reading defaults, encodedObject = %@", encodedObject); | |
if (encodedObject) | |
entity = [NSKeyedUnarchiver unarchiveObjectWithData:encodedObject]; | |
return entity; | |
} | |
@end | |
void describe(SearchParameterEntity *entity) { | |
NSMutableDictionary *parameters = entity.parameters; | |
NSLog(@"parameters = %@", parameters); | |
CategoryEntity *category = [parameters objectForKey:@"category"]; | |
NSLog(@"ID = '%@'", category.ID); | |
NSLog(@"text = '%@'", category.text); | |
NSLog(@"category = '%@'", category.category); | |
NSLog(@"categoryIdentifierKey = '%@'", category.categoryIdentifierKey); | |
} | |
int main(int argc, char *argv[]) { | |
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; | |
CategoryEntity *category = [[CategoryEntity alloc] init]; | |
category.ID = @"1"; | |
category.text = @"some text"; | |
category.category = @"category name"; | |
category.categoryIdentifierKey = @"category identifier key"; | |
NSMutableDictionary *parameters = [NSMutableDictionary dictionaryWithObject:category forKey:@"category"]; | |
SearchParameterEntity *searchParameters = [[SearchParameterEntity alloc] init]; | |
searchParameters.parameters = parameters; | |
NSLog(@"persisting entity: %@", searchParameters); | |
describe(searchParameters); | |
[NSUserDefaultsWrapper setPreviousSearchParameters:searchParameters]; | |
SearchParameterEntity *restored = [NSUserDefaultsWrapper getPreviousSearchParameters]; | |
NSLog(@"restored entity: %@", restored); | |
describe(restored); | |
[pool release]; | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment