2010-02-03 109 views
0

我正在創建一個用戶按下按鈕後運行的方法。該方法根據用戶定義的名稱創建一個文件夾,並向該文件夾添加一個plist。問題是它不會創建plist。我知道代碼獨立工作,但我認爲plist的創建是在創建目錄之前完成的。有什麼方法可以添加「等待」子句嗎? 感謝iPhone等待代碼執行

- (void) addTheDirectory{ 
NSString *theTitle = theTitleField.text; 
NSString *theDescription = theDescriptionField.text; 

//create the directory 
[[NSFileManager defaultManager] createDirectoryAtPath:[NSString stringWithFormat:@"%@/%@", DOCUMENTS_FOLDER, theTitle] attributes:nil]; 

//create the plist 
NSMutableDictionary* plistDictionary = [[NSMutableDictionary alloc] init]; 
[plistDictionary setValue:theTitle forKey:@"Title"]; 
[plistDictionary setValue:theDescription forKey:@"Description"]; 
[plistDictionary setValue:@"0.1" forKey:@"LBVersion"]; 
[plistDictionary writeToFile:[NSString stringWithFormat:@"%@/%@/info.plist", DOCUMENTS_FOLDER, theTitle] atomically: YES]; 
} 

回答

2

createDirectoryAtPath:attributes:返回BOOL這樣的代碼就不會進步,直到方法創建的目錄和回報。

我覺得這個建築...

[NSString stringWithFormat:@"%@/%@/info.plist", DOCUMENTS_FOLDER, theTitle] 

...是最有可能您的問題。它通常會工作,但更強大的方法是使用的專用路徑的方法,如一個:

[NSString pathWithComponents:[NSArray arrayWithObjects:DOCUMENTS_FOLDER, theTitle,@"/info.plist",nil]] 

這使得它更可能是你會得到一個正確的路徑,特別是如果你只是改變它。

您還應該從兩個文件操作中捕獲布爾返回,以便您可以查看哪一個失敗。

+1

同意:你應該檢查'-createDirectoryAtPath'的結果。不保證能夠成功,對你而言,可能不是。 – 2010-02-03 17:48:50

+0

它成功了,因爲我可以看到創建的目錄。我想我需要考慮線程。感謝您的建議,但。 – Jack 2010-02-03 18:28:25

+1

我認爲線程是矯枉過正。通常的做法是創建一個目錄然後立即寫入目錄。我以這種方式構建了整個填充層次結構。大多數代碼不會創建目錄,請稍等片刻,然後再寫一些內容。還有其他的錯誤,最有可能在路徑建設。在用於創建路徑的其中一個變量中可能存在編碼問題。嘗試使用其中一種專用路徑方法構建路徑,並查看是否有幫助。僅僅因爲目錄的路徑起作用,並不意味着文件的路徑。 – TechZen 2010-02-04 02:15:36