Return to Snippet

Revision: 26285
at April 22, 2010 11:34 by LeeProbert


Initial Code
/* INTERFACE */

#import <Foundation/Foundation.h>

#define kFilename	@"dataarchive.plist"
#define kDataKey		@"Data"

@class DataModel;
@interface DataManager : NSObject {

	DataModel *dataModel;
}

@property (nonatomic, retain) DataModel *dataModel;

-(NSString *)dataFilePath;
-(void)initDataModel;
-(void)applicationWillTerminate:(NSNotification *)notification;

+(DataManager *)sharedDataManager;

@end

/* IMPLEMENTATION */

#import "DataManager.h"
#import "SynthesizeSingleton.h"
#import "DataModel.h"
#import "FaveVO.h"

@implementation DataManager

SYNTHESIZE_SINGLETON_FOR_CLASS(DataManager);

@synthesize dataModel;

//-----------------------------------------------------------------------------------------------------
- (NSString *)dataFilePath
{
	NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
	NSString *documentsDirectory = [paths objectAtIndex:0];
	return [documentsDirectory stringByAppendingPathComponent:kFilename];
}
//-----------------------------------------------------------------------------------------------------
-(void)initDataModel
{
	NSString *filePath = [self dataFilePath];
	
	if([[NSFileManager defaultManager] fileExistsAtPath:filePath])
	{
		NSLog(@"FILE EXISTS");
		
		NSData *data = [[NSMutableData alloc] initWithContentsOfFile:[self dataFilePath]];
		NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
		
		DataModel *decodedDataModel = [unarchiver decodeObjectForKey:kDataKey];
		
		dataModel = [[DataModel alloc] init];
		
		NSEnumerator *enumerator;
		enumerator = [decodedDataModel.favesArray objectEnumerator];
		
		FaveVO *decodedFaveVO;
		
		while (decodedFaveVO = [enumerator nextObject])
		{
			[dataModel createNewFaveVOFromFaveVO:decodedFaveVO];
		}
		
		int index = decodedDataModel.faveIndex;
		dataModel.faveIndex = index;
		dataModel.currentFave = [dataModel.favesArray objectAtIndex:index];
		
		[unarchiver finishDecoding];
		[unarchiver release];
		[data release];
	}
	else 
	{
		NSLog(@"FILE DOES NOT EXIST");
		
		dataModel = [[DataModel alloc] init];
	}
	
	UIApplication *app = [UIApplication sharedApplication];
	[[NSNotificationCenter defaultCenter] addObserver:self
											 selector:@selector(applicationWillTerminate:)
												 name:UIApplicationWillTerminateNotification 
											   object:app];
	 
}
//-------------------------------------------------------------
- (void)applicationWillTerminate:(NSNotification *)notification
{
	NSLog(@"Application will terminate");
	
	NSMutableData *data = [[NSMutableData alloc] init];
	NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
	
	[archiver encodeObject:dataModel forKey:kDataKey];
	[archiver finishEncoding];
	[data writeToFile:[self dataFilePath] atomically:YES];
	
	[archiver release];
	[data release];
}


//--------------------------------------------------
-(void)dealloc
{
	[dataModel release];
	[super dealloc];
}


@end

Initial URL


Initial Description
This is a follow up to another snippet which shows how to create the object you want to archive and unarchive.

Initial Title
Archiving and Unarchiving DataModel Object

Initial Tags


Initial Language
Objective C