#import <Foundation/Foundation.h> #import "Persistence02Note.h" #define FILE_NAME @"Persistence02NotesList.archive" #define ARCHIVE_KEY @"Persistence02NotesList" @interface Persistence02NoteDAO : NSObject + (Persistence02NoteDAO*)sharedManager; - (NSString *)applicationDocumentsDirectoryFile; - (void)createEditableCopyOfDatabaseIfNeeded; //插入Persistence02Note方法 -(int) create:(Persistence02Note*)model; //删除Persistence02Note方法 -(int) remove:(Persistence02Note*)model; //修改Persistence02Note方法 -(int) modify:(Persistence02Note*)model; //查询所有数据方法 -(NSMutableArray*) findAll; //按照主键查询数据方法 -(Persistence02Note*) findById:(Persistence02Note*)model; @end
#import "Persistence02NoteDAO.h" @implementation Persistence02NoteDAO static Persistence02NoteDAO *sharedManager = nil; + (Persistence02NoteDAO*)sharedManager { static dispatch_once_t once; dispatch_once(&once, ^{ sharedManager = [[self alloc] init]; [sharedManager createEditableCopyOfDatabaseIfNeeded]; }); return sharedManager; } - (void)createEditableCopyOfDatabaseIfNeeded { NSFileManager *fileManager = [NSFileManager defaultManager]; NSString *writableDBPath = [self applicationDocumentsDirectoryFile]; BOOL dbexits = [fileManager fileExistsAtPath:writableDBPath]; if (!dbexits) { NSString *path = [self applicationDocumentsDirectoryFile]; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; NSDate *date1 = [dateFormatter dateFromString:@"2010-08-04 16:01:03"]; Persistence02Note* Persistence02Note1 = [[Persistence02Note alloc] init]; Persistence02Note1.date = date1; Persistence02Note1.content = @"Welcome to MyPersistence02Note."; NSDate *date2 = [dateFormatter dateFromString:@"2011-12-04 16:01:03"]; Persistence02Note* Persistence02Note2 = [[Persistence02Note alloc] init]; Persistence02Note2.date = date2; Persistence02Note2.content = @"欢迎使用MyPersistence02Note。"; NSMutableArray* array = [[NSMutableArray alloc] init]; [array addObject:Persistence02Note1]; [array addObject:Persistence02Note2]; NSMutableData * theData = [NSMutableData data]; NSKeyedArchiver * archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:theData]; [archiver encodeObject:array forKey:ARCHIVE_KEY]; [archiver finishEncoding]; [theData writeToFile:path atomically:YES]; } } - (NSString *)applicationDocumentsDirectoryFile { NSString *documentDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; NSString *path = [documentDirectory stringByAppendingPathComponent:FILE_NAME]; return path; } //插入Persistence02Note方法 -(int) create:(Persistence02Note*)model { NSString *path = [self applicationDocumentsDirectoryFile]; NSMutableArray *array = [self findAll]; [array addObject:model]; NSMutableData * theData = [NSMutableData data]; NSKeyedArchiver * archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:theData]; [archiver encodeObject:array forKey:ARCHIVE_KEY]; [archiver finishEncoding]; [theData writeToFile:path atomically:YES]; return 0; } //删除Persistence02Note方法 -(int) remove:(Persistence02Note*)model { NSString *path = [self applicationDocumentsDirectoryFile]; NSMutableArray *array = [self findAll]; for (Persistence02Note* Persistence02Note in array) { //比较日期主键是否相等 if ([Persistence02Note.date isEqualToDate:model.date]){ [array removeObject: Persistence02Note]; NSMutableData * theData = [NSMutableData data]; NSKeyedArchiver * archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:theData]; [archiver encodeObject:array forKey:ARCHIVE_KEY]; [archiver finishEncoding]; [theData writeToFile:path atomically:YES]; break; } } return 0; } //修改Persistence02Note方法 -(int) modify:(Persistence02Note*)model { NSString *path = [self applicationDocumentsDirectoryFile]; NSMutableArray *array = [self findAll]; for (Persistence02Note* Persistence02Note in array) { //比较日期主键是否相等 if ([Persistence02Note.date isEqualToDate:model.date]){ Persistence02Note.content = model.content; NSMutableData * theData = [NSMutableData data]; NSKeyedArchiver * archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:theData]; [archiver encodeObject:array forKey:ARCHIVE_KEY]; [archiver finishEncoding]; [theData writeToFile:path atomically:YES]; break; } } return 0; } //查询所有数据方法 -(NSMutableArray*) findAll { NSString *path = [self applicationDocumentsDirectoryFile]; NSMutableArray *listData = [[NSMutableArray alloc] init]; NSData * theData =[NSData dataWithContentsOfFile:path]; if([theData length] > 0) { NSKeyedUnarchiver * archiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:theData]; listData = [archiver decodeObjectForKey:ARCHIVE_KEY]; [archiver finishDecoding]; } return listData; } //按照主键查询数据方法 -(Persistence02Note*) findById:(Persistence02Note*)model { NSString *path = [self applicationDocumentsDirectoryFile]; NSMutableArray *listData = [[NSMutableArray alloc] init]; NSData * theData =[NSData dataWithContentsOfFile:path]; if([theData length] > 0) { NSKeyedUnarchiver * archiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:theData]; listData = [archiver decodeObjectForKey:ARCHIVE_KEY]; [archiver finishDecoding]; for (Persistence02Note* Persistence02Note in listData) { //比较日期主键是否相等 if ([Persistence02Note.date isEqualToDate:model.date]){ return Persistence02Note; } } } return nil; } @end