1. 程式人生 > >最近真機上的Plist 搞的我頭大總是無法寫入,這下終於行了

最近真機上的Plist 搞的我頭大總是無法寫入,這下終於行了

轉載請註明本文章來自 x1135768777

其實寫入不到真機裡面主要是你寫入時,當前那資料夾裡你要寫入的plist根本不存在

所以你怎麼寫都寫不進去,所以你必須先建立你要寫入的plist;

你用這樣初始化程式就能自己建立:

 NSMutableArray *dictplist = [[NSMutableArray alloc] init];
                        [dictplist insertObject:markName atIndex:0];
                        
                        [dictplist writeToFile:plistPath atomically:YES];
直接下面這種是不行的
 NSMutableArray *array = [[NSMutableArray alloc] initWithContentsOfFile:plistPath];
                        [array insertObject:markName atIndex:0];
                        
                        [array writeToFile:plistPath atomically:YES];

下面是具體的實現方法

一般plist 的寫入位置在

寫入檔案的位置:(Library資料夾)

NSString *lib = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject];
                    NSString *libPath = [lib stringByAppendingString:@"/Caches"];
                    NSString* plistPath = [libPath stringByAppendingFormat:@"/bookmark.plist"];
                    
                    NSLog(@"%@",plistPath);
                    if(![[NSFileManager defaultManager] fileExistsAtPath:plistPath]) {
                        NSMutableArray *dictplist = [[NSMutableArray alloc] init];
                        [dictplist insertObject:markName atIndex:0];
                        
                        [dictplist writeToFile:plistPath atomically:YES];
                        NSLog(@"------1-----%@",dictplist);
                    }
                    else
                    {
                        NSMutableArray *array = [[NSMutableArray alloc] initWithContentsOfFile:plistPath];
                        [array insertObject:markName atIndex:0];
                        
                        [array writeToFile:plistPath atomically:YES];
                        NSLog(@"-------2----%@",array);
                    }

寫入檔案的位置:( Document 資料夾)

 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
                    
                    //獲取完整路徑
                    
                    NSString *documentsDirectory = [paths objectAtIndex:0];
                    
                    NSString *plistPath = [documentsDirectory stringByAppendingPathComponent:@"test2.plist"];
            
                    NSLog(@"%@",plistPath);

                    if(![[NSFileManager defaultManager] fileExistsAtPath:plistPath]) {
                        NSMutableArray *dictplist = [[NSMutableArray alloc] init];
                        [dictplist insertObject:markName atIndex:0];

                        [dictplist writeToFile:plistPath atomically:YES];
                        NSLog(@"------1-----%@",dictplist);
                    }
                    else
                    {
                        NSMutableArray *array = [[NSMutableArray alloc] initWithContentsOfFile:plistPath];
                        [array insertObject:markName atIndex:0];

                        [array writeToFile:plistPath atomically:YES];
                        NSLog(@"-------2----%@",array);
                     }

下面的是參考 http://blog.csdn.net/smallsky_keke/article/details/7431277

這篇文章是自己通過實踐獲取,在網上查過很多資料,也走了不上的彎路,由於剛開始學子不久,只是把自己遇到的問題貢獻給大家

一,建立檔案

    //獲取路徑物件

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

//獲取完整路徑

    NSString *documentsDirectory = [paths objectAtIndex:0];

    NSString *plistPath = [documentsDirectory stringByAppendingPathComponent:@"test.plist"];

NSMutableDictionary *dictplist = [[NSMutableDictionaryalloc ] init];

//設定屬性值

    [dictplist setObject:@"張三" forKey:@"name"];

    [dictplist setObject:@"李四"forKey:@"name1"];

    [dictplist setObject:@"王五"forKey:@"name2"];

//寫入檔案

    [dictplist writeToFile:plistPath atomically:YES];

這個是建立了一個簡單的plist檔案,建立後的圖1為:


下面是建立了一種多鍵值的plist檔案,程式碼和圖如下:

//獲取路徑物件

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

//獲取完整路徑

    NSString *documentsDirectory = [paths objectAtIndex:0];

    NSString *plistPath = [documentsDirectory stringByAppendingPathComponent:@"test.plist"];

NSMutableDictionary *dictplist = [[NSMutableDictionaryalloc ] init];

//定義第一個外掛的屬性

NSMutableDictionary *plugin1 = [[NSMutableDictionaryalloc]init];

    [plugin1 setObject:@"張三"forKey:@"name1"];

    [plugin1 setObject:@"李四"forKey:@"name2"];

//定義第二個外掛的屬性

NSMutableDictionary *plugin2 = [[NSMutableDictionaryalloc]init];

    [plugin2 setObject:@"王五"forKey:@"name1"];

    [plugin2 setObject:@"趙斌"forKey:@"name2"];

//設定屬性值

    [dictplist setObject:plugin1 forKey:@"初一班"];

    [dictplist setObject:plugin2 forKey:@"初二班"];

//寫入檔案

    [dictplist writeToFile:plistPath atomically:YES];

圖2:

    

針對圖1進行修改的程式,程式碼如下:

    NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES)       objectAtIndex:0]stringByAppendingPathComponent:@"test.plist"];    

NSMutableDictionary *applist = [[[NSMutableDictionaryalloc]initWithContentsOfFile:path]mutableCopy];    

    NSString *name = [applist objectForKey:@"name"];    

    name = @"山山";   

    [applist setObject:name forKey:@"name"];

    [applist writeToFile:path atomically:YES];

執行後如下圖:

    

針對圖2進行修改的程式,程式碼如下:

      [dictplist writeToFile:plistPath atomically:YES];

NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES)objectAtIndex:0]stringByAppendingPathComponent:@"test.plist"];

//根據路徑獲取test.plist的全部內容

NSMutableDictionary *infolist= [[[NSMutableDictionaryalloc]initWithContentsOfFile:path]mutableCopy];

//獲取初一班的資訊

    NSMutableDictionary *info = [infolist objectForKey:@"初一班"];

    NSString *name1 = [info objectForKey:@"name1"];

    name1 = @"山山";

    [info setValue:name1 forKey:@"name1"];

    [infolist setValue:info forKey:@"初一班"];

    [infolist writeToFile:path atomically:YES];

圖如下:

    

以上兩個修改資訊的地方,必須要加入紅色標記的方法,才能在表裡進行增改操作。

以上是個人的學習心得,請大家多多指教。