параметр не получен в методе - PullRequest
0 голосов
/ 19 февраля 2012

У меня есть метод, который прост и довольно вперед.Предполагается создать папку, если она не существует.Он принимает один строковый параметр, который правильно объявлен.

Когда я использую его и передаю параметр, получающая переменная остается пустой, что довольно странно, поскольку 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 ]

1 голос
/ 19 февраля 2012

Я предполагаю, что, поскольку вы не определяете тип thePath, компилятор по умолчанию имеет значение int, а int не очень хорошо печатается с %@.

0 голосов
/ 19 февраля 2012

Это немного чище и должно работать:

- (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];
    }
}
0 голосов
/ 19 февраля 2012

Я не вижу никакого объявления типа для аргумента thePath селектор, оно должно быть

- (void)    createFolder:(NSString*)thePath {
    BOOL isDir;

Возможно, вы не получите предупреждение, потому что по умолчанию оно имеет значение id, но этов основном решит проблему.Но тип id в этом случае был бы нормальным, может быть, это какая-то черная магия ObjC ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...