我有一个简单而且非常前进的方法。 如果它不存在,它应该创建一个文件夹。 它需要一个正确声明的字符串参数。
当我使用它并传递参数时,接收变量保持为空,这很奇怪,因为pathTo_Folder是一个路径。
为什么会发生这种情况?
//Declaration in .h
- (void) createFolder : (NSString *) thePath ;
//The call
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
NSString *homePath = [@"~" stringByExpandingTildeInPath];
NSString *pathTo_Folder = [NSString stringWithFormat:@"%@/Library/Application Support/prolog/",homePath];
[self createFolder : pathTo_Folder];
}
//In .m
- (void) createFolder: thePath {
BOOL isDir;
NSFileManager *fileManager = [NSFileManager defaultManager] ;
[fileManager fileExistsAtPath:thePath isDirectory: &isDir] ;
NSLog(@"Folder '%@' exists: %d",thePath,isDir) ;
if (isDir == FALSE)
{
[fileManager createDirectoryAtPath: thePath withIntermediateDirectories:YES attributes:nil error:nil];
}
}
答案 0 :(得分:1)
我的猜测是,由于您没有定义thePath
的类型,编译器将其默认为int
,而int
与{%@
打印效果不佳1}}。
答案 1 :(得分:0)
我没有看到参数thePath
选择器的任何类型声明,它应该是
- (void) createFolder:(NSString*)thePath {
BOOL isDir;
可能你没有得到警告,因为它的默认值为id
,但这主要解决了这个问题。但是在这种情况下id
类型就可以了,也许它是一些ObjC黑魔法......
答案 2 :(得分:0)
这有点干净,应该有效:
- (void) createFolder: (NSString *) thePath;
- (void) applicationDidFinishLaunching: (NSNotification *) aNotification
{
NSString *appSupportDir = [NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory,
NSUserDomainMask, YES) lastObject];
[self createFolder: [appSupportDir stringByAppendingPathComponent: @"prolog"]];
}
- (void) createFolder: (NSString *) thePath
{
BOOL isDir;
NSFileManager *fileManager = [NSFileManager defaultManager];
if (![fileManager fileExistsAtPath: thePath isDirectory: &isDir]) {
[fileManager createDirectoryAtPath: thePath withIntermediateDirectories: YES attributes: nil error: nil];
}
}