方法中未收到参数

时间:2012-02-19 03:55:37

标签: objective-c methods parameters

我有一个简单而且非常前进的方法。 如果它不存在,它应该创建一个文件夹。 它需要一个正确声明的字符串参数。

当我使用它并传递参数时,接收变量保持为空,这很奇怪,因为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];
    }
}

3 个答案:

答案 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];
    }
}