iPhone開發之.plist文件增刪改查操作


主要操作:

1.//獲得plist路徑    -(NSString*)getPlistPath;

2.//判斷沙盒中名為plistname的文件是否存在    -(BOOL) isPlistFileExists;

3.//讀取沙盒中Document文件夾下的BookList.plist文件

    [NSMutableDictionarydictionaryWithContentsOfFile:plistPath];

4.//寫入文件     if ([plistDictionary writeToFile:plistPath atomically:YES])

 

WBBooksManager.m文件:

#import "WBBooksManager.h"

@implementation WBBooksManager

static WBBooksManager *g_instance = nil;

+ (WBBooksManager *)sharedInstance
{
    @synchronized(self) {
        if ( g_instance == nil ) {
            g_instance = [[self alloc] init];
        }
    }
    return g_instance;
}

//獲得plist路徑
-(NSString*)getPlistPath{
    //沙盒中的文件路徑
    NSArray *storeFilePath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *doucumentsDirectiory = [storeFilePath objectAtIndex:0];
    NSString *plistPath =[doucumentsDirectiory stringByAppendingPathComponent:@"WBBooks.plist"];       //根據需要更改文件名
    return plistPath;
}

//判斷沙盒中名為plistname的文件是否存在
-(BOOL) isPlistFileExists{

    NSString *plistPath =[[WBBooksManager sharedInstance]getPlistPath];
    NSFileManager *fileManager = [NSFileManager defaultManager];
    if( [fileManager fileExistsAtPath:plistPath]== NO ) {
        NSLog(@"not exists");
        return NO;
    }else{
        return YES;
    }
    
}

-(void)initPlist{
    NSString *plistPath = [[WBBooksManager sharedInstance] getPlistPath];
    
    //如果plist文件不存在,將工程中已建起的plist文件寫入沙盒中
    if (! [[WBBooksManager sharedInstance] isPlistFileExists]) {
        
        //從自己建立的plist文件 復制到沙盒中 ,方法一
        NSError *error;
        NSFileManager *fileManager = [NSFileManager defaultManager];
        NSString *bundle = [[NSBundle mainBundle] pathForResource:@"WBBooks" ofType:@"plist"];
        [fileManager copyItemAtPath:bundle toPath:plistPath error:&error];
        
        //方法二
        //        NSString *path = [[NSBundle mainBundle] pathForResource:@"WBBooks"ofType:@"plist"];
        //        NSMutableDictionary *activityDics = [[NSMutableDictionary alloc] initWithContentsOfFile:path];
        //        [activityDics writeToFile:plistPath atomically:YES];
    }
}


//判斷key的書是否存在
-(BOOL)isBookExistsForKey:(NSString*)key{
    
    NSString *plistPath = [[WBBooksManager sharedInstance] getPlistPath];
    NSMutableDictionary *WBBooksDictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:plistPath]; 
    
    //根目錄下存在名為bookname的字典
    if ([WBBooksDictionary objectForKey:key]) {
        return YES;
    }else{
        return NO;
    }
}


//根據key值刪除對應書籍
-(void)removeBookWithKey:(NSString *)key{
    
    NSString *plistPath = [[WBBooksManager sharedInstance] getPlistPath];
    NSMutableDictionary *WBBooksDictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:plistPath];
    
    [WBBooksDictionary removeObjectForKey:key];
    [WBBooksDictionary writeToFile:plistPath atomically:YES]; //刪除后重新寫入
    
}



//刪除plistPath路徑對應的文件
-(void)deletePlist{
    
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSString *plistPath = [[WBBooksManager sharedInstance] getPlistPath];
    [fileManager removeItemAtPath:plistPath error:nil];
    
}

//將dictionary寫入plist文件,前提:dictionary已經准備好
-(void)writePlist:(NSMutableDictionary*)dictionary forKey:(NSString *)key{
    
    NSMutableDictionary *plistDictionary = [[NSMutableDictionary alloc]init];    
    
    //如果已存在則讀取現有數據
    if ([[WBBooksManager sharedInstance]isPlistFileExists]) {
        plistDictionary = [[WBBooksManager sharedInstance]readPlist];
    }

        
    
    //增加一個數據
    [plistDictionary setValue:dictionary forKey:key]; //在plistDictionary增加一個key為...的value
    
    NSString *plistPath = [[WBBooksManager sharedInstance] getPlistPath];
    
    if([plistDictionary writeToFile:plistPath atomically:YES]){
        NSLog(@"write ok!");
    }else{
        NSLog(@"ddd");
    }
    
}

//
-(NSMutableDictionary*)readPlist{
    
    NSString *plistPath = [[WBBooksManager sharedInstance] getPlistPath];
    NSMutableDictionary *resultDictionary = [[NSMutableDictionary alloc]initWithContentsOfFile:plistPath];
    return resultDictionary;
}

//讀取plist文件內容復制給dictionary   備用
-(void)readPlist:(NSMutableDictionary **)dictionary{
    NSString *plistPath = [[WBBooksManager sharedInstance] getPlistPath];
    *dictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:plistPath];
}

//更改一條數據,就是把dictionary內key重寫
-(void)replaceDictionary:(NSMutableDictionary *)newDictionary withDictionaryKey:(NSString *)key{

    [[WBBooksManager sharedInstance]removeBookWithKey:key];
    [[WBBooksManager sharedInstance]writePlist:newDictionary forKey:key];

}


-(NSInteger)getBooksCount{
    
    NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];
    dictionary = [[WBBooksManager sharedInstance] readPlist];
    return [dictionary count];
    
}

 

調用方法:

 //導入頭文件
#import "WBBooksManager.h"

-(void)viewDidLoad中添加以下代碼,是剛寫的時候測試時用的,狠時繁雜。  將就着看好了、

 WBBooksManager *sss = [[WBBooksManager alloc] init ];
    
    NSString *plistPath =[[WBBooksManager sharedInstance] getPlistPath];

    if( [sss isPlistFileExists]== NO ) {//不存在
        
        NSLog(@"WBBooks.plist not exists ,build it.");
    

        
        NSMutableDictionary *addDictionary1 = [[NSMutableDictionary alloc] init];
        NSString *addName1 = [NSString stringWithFormat:@"www"];
        NSNumber *addNumber1 = [[NSNumber alloc] initWithInt:13223];
        [addDictionary1 setValue:addName1 forKey:@"name"];
        [addDictionary1 setValue:addNumber1 forKey:@"list"];
        [[WBBooksManager sharedInstance]writePlist:addDictionary1 forKey:@"Add1"];

        
        NSMutableDictionary *addDictionary2 = [[NSMutableDictionary alloc] init];
        NSString *addName2 = [NSString stringWithFormat:@"aaas"];
        NSNumber *addNumber2 = [[NSNumber alloc] initWithInt:123];
        [addDictionary2 setValue:addName2 forKey:@"name"];
        [addDictionary2 setValue:addNumber2 forKey:@"list"];
        [[WBBooksManager sharedInstance]writePlist:addDictionary2 forKey:@"Add2"];
        
    }

    NSMutableDictionary *resultDictionary = [[NSMutableDictionary alloc] init];
    [[WBBooksManager sharedInstance] readPlist:&resultDictionary];
    NSLog(@"add1的結果%@", resultDictionary);   
    
    NSArray *array = [resultDictionary allKeys];  //所有的Book
    
    int num =  [[WBBooksManager sharedInstance] getBooksCount]; //總數
    NSLog(@"array%@ %d",array,num);
    
       
    NSMutableDictionary *plistDictionary = [[NSMutableDictionary alloc]init];    
    plistDictionary = [[WBBooksManager sharedInstance]readPlist];

    NSMutableDictionary *addDictionary2 = [[NSMutableDictionary alloc] init];
    NSString *addName2 = [NSString stringWithFormat:@"dafd"];
    NSNumber *addNumber2 = [[NSNumber alloc] initWithInt:321];
    [addDictionary2 setValue:addName2 forKey:@"name"];
    [addDictionary2 setValue:addNumber2 forKey:@"list"];
    
    [plistDictionary setValue:addDictionary2 forKey:@"Add2"];
    [plistDictionary writeToFile:plistPath atomically:YES];
    
    
    
    
    resultDictionary = [[NSMutableDictionary alloc] init];
    [[WBBooksManager sharedInstance] readPlist:&resultDictionary];
    NSLog(@"add1的結果%@", resultDictionary);   
    
    array = [resultDictionary allKeys];  //所有的Book
    
    num =  [[WBBooksManager sharedInstance] getBooksCount]; //總數
    NSLog(@"array%@ %d",array,num);

    
    
    
    NSMutableDictionary *addDictionary1 = [[NSMutableDictionary alloc] init];
    
    NSString *addName1 = [NSString stringWithFormat:@"wmmm"];
    NSNumber *addNumber1 = [[NSNumber alloc] initWithInt:123];
    [addDictionary1 setValue:addName1 forKey:@"name"];
    [addDictionary1 setValue:addNumber1 forKey:@"list"];
   
    //判斷給出的Key對應的數據是否存在
    if ([[WBBooksManager sharedInstance] isBookExistsForKey:@"Add1"]) {
        //存在,則替換之
        NSLog(@"存在,則替換之");
        [[WBBooksManager sharedInstance] replaceDictionary:addDictionary1 withDictionaryKey:@"Add1"];
    }else{//不存在,則寫入
        NSLog(@"不存在,則寫入");
        [[WBBooksManager sharedInstance] writePlist:addDictionary1 forKey:@"Add1"];
    }

    
    resultDictionary = [[NSMutableDictionary alloc] init];
    [[WBBooksManager sharedInstance] readPlist:&resultDictionary];
    NSLog(@"add1的結果%@", resultDictionary);   
    
    array = [resultDictionary allKeys];  //所有的Book
    
    num =  [[WBBooksManager sharedInstance] getBooksCount]; //總數
    NSLog(@"array%@ %d",array,num);

    
    
    addName1 = [NSString stringWithFormat:@"wmmm"];
    addNumber1 = [[NSNumber alloc] initWithInt:123];
    [addDictionary1 setValue:addName1 forKey:@"name"];
    [addDictionary1 setValue:addNumber1 forKey:@"list"];
    
    //更改key對應的數據
    if ([[WBBooksManager sharedInstance] isBookExistsForKey:@"Add1"]) {
        [[WBBooksManager sharedInstance] replaceDictionary:addDictionary1 withDictionaryKey:@"Add1"];
    }
    resultDictionary = [[WBBooksManager sharedInstance]readPlist];
    NSLog(@"add1111的結果%@", resultDictionary); 
    
    
    //刪除給出key對應的數據
    if ([[WBBooksManager sharedInstance] isBookExistsForKey:@"Add1"]) {
        [[WBBooksManager sharedInstance] removeBookWithKey:@"Add1"];
    }   
    resultDictionary = [[WBBooksManager sharedInstance]readPlist];
    NSLog(@"add1111的結果%@", resultDictionary); 
    
    //刪除整個plist文件
//    if ([[WBBooksManager sharedInstance]isPlistFileExists]) {
//    [[WBBooksManager sharedInstance] deletePlist];    
//    }
    
    resultDictionary = [[WBBooksManager sharedInstance]readPlist];
    NSLog(@"add1111的結果%@", resultDictionary); 

 



//附上主要操作
/*
1.NSMutableDictionary/NSDictionary //初始化 NSMutableDictionary *plistDictionary = [NSMutableDictionary dictionaryWithCapacity:0]; //將新的dictionary添加到olddictionary之后,若兩dictionary具有相同的key,則更新 [oldDictionary addEntriesFromDictionary:[NSDictionary dictionaryWithDictionary: newDictionary]]; //給dictionary賦值 [plistDictionary setObject:oldDictionary forKey:key]; //移除某值 [plistDictionary removeObjectForKey:bookID]; //讀取plistPath路徑下的文件 NSMutableDictionary *nsmutableDictionary = [NSMutableDictionary dictionaryWithContentsOfFile:plistPath]; 2.NSMutableArray/NSArray //判斷數組中是否包含某值 [bookIDArray containsObject:bookID] //移除某值 [contentArray replaceObjectAtIndex:j withObject:contentDictionary]; //寫入數據 [plistDictionary writeToFile:plistPath atomically:YES]; */

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM