2011-09-08 89 views
0

我能夠保存plist文件在模擬器中,但我無法將Plist文件保存在設備中。任何建議。無法保存plist ios

我爲使用

NSString* dictPath = [[NSBundle mainBundle] pathForResource:@"Dictionary" ofType:@"plist"]; 
NSDictionary * dict = [[NSDictionary alloc] initWithContentsOfFile:dictPath]; 

讀取文件

[dict writeToFile:dictPath atomically: YES]; 

寫入文件。

+0

是否與主Bundle只讀有關?如何在r/w訪問位置保存plist –

回答

1

您需要保存的plist文件中的目錄

NSString *mainBundlePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
NSString *dictPath = [mainBundlePath stringByAppendingPathComponent:@"Dictionary"]; 
NSDictionary * dict = ...; //Construct your dictionary 
[dict writeToFile:dictPath atomically: YES]; 

閱讀

NSDictionary * dict = [[NSDictionary alloc] initWithContentsOfFile:dictPath]; 
11

你不能寫主束。你只能從主包中讀取。如果你想寫一個文件,你需要把它放在你的應用程序的文檔目錄中。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *path = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.plist",plistName]]; 

如果您需要主包中的plist,您可以先將其複製到文檔目錄中,然後對其進行修改。建議進行檢查以確保只複製一次。

NSError *error; 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *path = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.plist",plistName]]; 

NSFileManager *fileManager = [NSFileManager defaultManager]; 

if (![fileManager fileExistsAtPath: path]){ 
    NSLog(@"File don't exists at path %@", path); 

    NSString *plistPathBundle = [[NSBundle mainBundle] pathForResource:plistName ofType:@"plist"]; 

    [fileManager copyItemAtPath:plistPathBundle toPath: path error:&error]; 
}else{ 
    NSLog(@"File exists at path:%@", path); 
} 
+0

當應用程序位於/ Applications文件夾時停止處理越獄iphone。 –