Skip to content

Instantly share code, notes, and snippets.

@todd1251
Created October 3, 2011 04:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save todd1251/1258465 to your computer and use it in GitHub Desktop.
Save todd1251/1258465 to your computer and use it in GitHub Desktop.
#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