2013-04-05 40 views
0

我想寫一個簡單的數組到plist文件,然後再檢索它。我有以下代碼:找不到plist文件

+ (NSString*) dataFilePath 
{ 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES); 
    NSString *documentDirectory = [paths objectAtIndex:0]; 
    NSString *dataFilePath = [documentDirectory stringByAppendingPathComponent:@"TipAlertViewDefaults.plist"]; 

    return dataFilePath; 
} 

+ (NSArray*) tipAlertViewDefaults 
{ 
    NSString *dataFilePath = [self dataFilePath]; 
    NSLog(@"DataFilePath: %@", dataFilePath); 
    NSMutableArray *tipAlertViewDefaults; 

    if ([[NSFileManager defaultManager] fileExistsAtPath:dataFilePath]) 
    { 
     NSLog(@"File Exists"); 
     tipAlertViewDefaults = [[NSMutableArray alloc] initWithContentsOfFile:dataFilePath]; 
    } 
    else 
    { 
     NSLog(@"File Doesn't Exist"); 
     tipAlertViewDefaults = [[NSMutableArray alloc] initWithObjects:[NSNumber numberWithBool:NO], nil]; 
     [tipAlertViewDefaults writeToFile:dataFilePath atomically:YES]; 
    } 

    return tipAlertViewDefaults; 
} 

我調用這個方法兩次,第一次它不應該找到該文件並寫它的第一次。然後第二個調用應該能夠找到該文件,但它不是。任何人都可以看到我要去哪裏嗎?

+0

你是什麼意思「它不是」?應該輸入你的'if' /'else'的哪個分支,哪個分支實際上被輸入?你是否收到任何錯誤訊息? (另外,這是一個語法錯誤:'return [dataFilePath];') – bdesham 2013-04-05 15:08:42

+0

'return [dataFilePath];' - 這不能編譯。 – 2013-04-05 15:13:37

回答

5

再一次,Xcode的愚蠢的自動完成讓你失去了:NSDocumentationDirectory應該是真的NSDocumentDirectory

iOS的Documentation目錄不存在,所以你不能在那裏寫。

+0

(又一個使用'vi'和'make'開始構建iOS應用程序的原因是什麼?) – 2013-04-05 15:12:20

+0

檢查應用程序文檔目錄中的文件會告訴你它沒有寫在那裏:'/ users//library /應用程序支持/ iphone模擬器/ /應用程序/ ...你必須通過ID尋找你的應用程序,但你會發現它。 – Aaron 2013-04-05 15:13:06

+0

是的,這看起來是問題。使用'NSDocumentationDirectory'會返回一個路徑,但目錄不存在,所以任何文件訪問都將失敗,除非該目錄是首先手動創建的。 – 2013-04-05 15:15:45

0

你真的想寫在NSDocumentationDirectory的目錄下嗎?我想,這個目錄不是默認創建的(所以你必須先創建它)。

也許你想要NSDocumentDirectory。我試過了,你的代碼工作。