IOS開發學習分享(三)——數據持久化(讀寫plist)

今天由於想實現用戶數據在app裏面的保存,由於覺得數據庫太麻煩,發現IOS有plist這一個簡單的文件儲存方式,一開始以爲挺簡單的,結果還是發現有許多的坑。。。


真機上親測有效(個人體會,plist適用於存儲單類別的數據,像是用戶的個人信息1以字典形式存在user.plist,而下載的記錄用列表形式存在download.plist等,一開始博主以爲plist可以存多種數據。。。)


首先是plist文件路徑的獲取,網上有許多的教程,一開始我以爲要先創建plist文件的,要自己定義路徑的說,結果發現可以直接通過函數獲取,。,

    NSArray *pathArr = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
    NSString *path = [pathArr objectAtIndex:0];
    //得到完整的文件路徑名
    NSString *plistPath = [path stringByAppendingPathComponent:@"User.plist"];

接下來就是看你要用NSArray還是NSDictionary了,兩者都差不多,但是這裏也有一個注意點是要用NSMutableDictionary,可變長度的數組或字典。。。
下面以字典爲例子

 NSMutableDictionary * plistDictionary =nil;
 //判斷路徑是否存在,不存在就初始化
    if (![[NSMutableDictionary alloc]initWithContentsOfFile:plistPath]) {
        //創建一個根容器爲數組的plist文件
        plistDictionary = [NSMutableDictionary dictionary];
        //寫入文件
        [plistDictionary writeToFile:plistPath atomically:YES];
    }else{
        plistDictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:plistPath];
    }

博主主要被坑到的地方是字典帶有null的時候會寫入失敗。。。,一開始不清楚的時候一直以爲是文件沒有創建,無語。。。。。。。
下面貼一下自己實現的將複合字典的null替換成空值的代碼,使用了類別實現(不得不說類別用來增加功能真的是超級方便)

.h文件

@interface NSDictionary (MyDictionary)
-(NSDictionary *)deleteAllNullValue;
@end

.m文件

@implementation  NSDictionary (MyDictionary)
- (NSDictionary *)deleteAllNullValue{
    NSMutableDictionary *mutableDic = [[NSMutableDictionary alloc] init];
    for (NSString *keyStr in self.allKeys) {
        if ([[self objectForKey:keyStr] isKindOfClass:[NSDictionary class]]){
            [mutableDic setValue:[[self objectForKey:keyStr] deleteAllNullValue] forKey:keyStr];
            continue;
        }
        if ([[self objectForKey:keyStr] isEqual:[NSNull null]]) {
            [mutableDic setObject:@"" forKey:keyStr];
        }
        else{
            [mutableDic setObject:[self objectForKey:keyStr] forKey:keyStr];
        }
    }
    return mutableDic;
}

@end

最後只要導入上面自己定義的類,調用函數[@{@"user":} deleteAllNullValue]就可以了。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章