iOS 開發指南 第11章 資料持久化之屬性列表 學習

來源:互聯網
上載者:User

標籤:

1 概述

  沙箱目錄:一種安全性原則,原理是只能允許自己的應用訪問目錄,而不許其他應用訪問。

  子目錄:Documents 用於儲存非常大的檔案或需要非常頻繁更新的資料

                              NSArray *documentDirectory=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);

                              documentDirectory是只有一個元素的數組,還需要取出路徑

                              NSString *myDocPath=[documentDirectory objectAtIndex:0];

             Library Preferences用於存放應用程式的設定資料 Caches用於存放快取檔案

             tmp 臨時檔案目錄 NSString *temDirectory=NSTemporaryDirectory(); 

2 持久化方式 資料儲存方式

   屬性列表:是XML檔案,數組和字典可以與屬性列表檔案相互轉換。

    NSArray和NSDictionary提供了讀寫屬性列表檔案的方法:+array/dictionaryWithContentsOfFile:

                                                                                -initWithContentOfFile:

                                                                                 writeToFile:atomically:是否使用輔助檔案

擷取檔案代碼:

- (NSString *)applicationDocumentsDirectoryFile {擷取沙箱Documents目錄檔案的完整路徑    NSString *documentDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];    NSString *path = [documentDirectory stringByAppendingPathComponent:@"NotesList.plist"];    return path;}- (void)createEditableCopyOfDatabaseIfNeeded {        NSFileManager *fileManager = [NSFileManager defaultManager];    NSString *writableDBPath = [self applicationDocumentsDirectoryFile];擷取檔案目錄    判斷檔案是否存在:fileExistsAtPath:    BOOL dbexits = [fileManager fileExistsAtPath:writableDBPath];    if (!dbexits) {若不存在則複製一個        NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"NotesList.plist"];                NSError *error;        BOOL success = [fileManager copyItemAtPath:defaultDBPath toPath:writableDBPath error:&error];        NSAssert(success, @"錯誤寫入檔案");斷言函數,第一個參數為假時拋出異常    }}

讀取與寫入檔案代碼:程式的插入/刪除/查詢等無非是檔案的操作

//插入Note方法-(int) create:(Note*)model{    NSString *path = [self applicationDocumentsDirectoryFile];    NSMutableArray *array = [[NSMutableArray alloc] initWithContentsOfFile:path];        NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];    [dateFormat setDateFormat: @"yyyy-MM-dd HH:mm:ss"];    將傳入的資料封裝成檔案所需格式    NSDictionary* dict = [NSDictionary                          dictionaryWithObjects:@[[dateFormat stringFromDate: model.date],model.content]                          forKeys:@[@"date",@"content"]];    *
setValue:forKey:
* [array addObject:dict]; [array writeToFile:path atomically:YES]; return 0;}//刪除Note方法-(int) remove:(Note*)model{ NSString *path = [self applicationDocumentsDirectoryFile]; NSMutableArray *array = [[NSMutableArray alloc] initWithContentsOfFile:path]; for (NSDictionary* dict in array) { NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 是把value取出來而不是key比較 //Note* note = [[Note alloc] init]; NSDate *date = [dateFormatter dateFromString:[dict objectForKey:@"date"]]; //note.content = [dict objectForKey:@"content"]; //比較日期主鍵是否相等 if ([date isEqualToDate:model.date]){ [array removeObject: dict]; [array writeToFile:path atomically:YES]; break; } } return 0;}//修改Note方法-(int) modify:(Note*)model{ NSString *path = [self applicationDocumentsDirectoryFile]; NSMutableArray *array = [[NSMutableArray alloc] initWithContentsOfFile:path]; for (NSDictionary* dict in array) { NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; NSDate *date = [dateFormatter dateFromString:[dict objectForKey:@"date"]]; NSString* content = [dict objectForKey:@"content"]; //比較日期主鍵是否相等 if ([date isEqualToDate:model.date]){ [dict setValue:content forKey:@"content"]; [array writeToFile:path atomically:YES]; break; } } return 0;}//查詢所有資料方法-(NSMutableArray*) findAll{ NSString *path = [self applicationDocumentsDirectoryFile]; //[self.listData removeAllObjects]; NSMutableArray *listData = [[NSMutableArray alloc] init]; NSMutableArray *array = [[NSMutableArray alloc] initWithContentsOfFile:path]; for (NSDictionary* dict in array) { NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; Note* note = [[Note alloc] init]; note.date = [dateFormatter dateFromString:[dict objectForKey:@"date"]]; note.content = [dict objectForKey:@"content"]; [listData addObject:note]; } return listData;}//按照主鍵查詢資料方法-(Note*) findById:(Note*)model{ NSString *path = [self applicationDocumentsDirectoryFile]; NSMutableArray *array = [[NSMutableArray alloc] initWithContentsOfFile:path]; for (NSDictionary* dict in array) { NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; Note* note = [[Note alloc] init]; note.date = [dateFormatter dateFromString:[dict objectForKey:@"date"]]; note.content = [dict objectForKey:@"content"]; //比較日期主鍵是否相等 日期欄位是主鍵 if ([note.date isEqualToDate:model.date]){ return note; } } return nil;}

 

iOS 開發指南 第11章 資料持久化之屬性列表 學習

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.