2012-02-19 3 views
0

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

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

Не думаете ли вы 'thePath' должны иметь тип? –

ответ

1

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

+0

Спасибо за ваши предложения, Я скопировал определение с .h на .m Например: - (void) createFolder: (NSString *) thePath; и теперь он работает. Большое спасибо. Ronald --- –

0

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

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

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

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]; 
    } 
} 
Смежные вопросы