2010-02-03 143 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

相关问题