2014-11-06 97 views
0

我在iOS應用程序中繼承NSFileManager以添加一些其他行爲。雖然這樣做,我遇到了一個問題,我可以演示沒有子類化。NSFileManager實例更改其他實例的當前目錄路徑

總之,我創建的NSFileManager的一個實例,改變其currentDirectoryPath,打印出來,然後創建另一個實例,設置其currentDirectoryPath別的東西,我結束了兩個相同的currentDirectoryPath實例。

這是如何複製此行爲:

NSString * pathA = [NSHomeDirectory() stringByAppendingPathComponent:@"directoryA"]; 
NSString * pathB = [NSHomeDirectory() stringByAppendingPathComponent:@"directoryB"]; 

[[NSFileManager defaultManager] createDirectoryAtPath:pathA withIntermediateDirectories:NO attributes:nil error:nil]; 
[[NSFileManager defaultManager] createDirectoryAtPath:pathB withIntermediateDirectories:NO attributes:nil error:nil]; 


NSFileManager * fileManagerA = [[CCFileManager alloc] init]; 
[fileManagerA changeCurrentDirectoryPath:pathA]; 

NSLog(@"fileManagerA.currentDirectoryPath = %@", fileManagerA.currentDirectoryPath); // outputs pathA, as expected 


NSFileManager * fileManagerB = [[CCFileManager alloc] init]; 
[fileManagerB changeCurrentDirectoryPath:pathB]; 

NSLog(@"fileManagerB.currentDirectoryPath = %@", fileManagerB.currentDirectoryPath); // outputs pathB, as expected 
NSLog(@"fileManagerA.currentDirectoryPath = %@", fileManagerA.currentDirectoryPath); // outputs pathB, why? 

我都試過SDK iOS上的7 7.1和8.1和8相同的結果。

+0

的實例[的NSFileManager defaultManager]是一個單。 – danh 2014-11-06 03:31:32

+0

@danh不是defaultManager的單身人士嗎? – SuitedSloth 2014-11-06 03:33:52

+0

@danh我認爲問題在於changeCurrentDirectoryPath更改整個過程的設置,而不僅僅是該實例。 – SuitedSloth 2014-11-06 03:36:05

回答

0

我在documentation for NSFileManager找到了答案。

所有相對路徑名稱都暗指當前工作的 目錄。更改當前工作目錄僅影響在當前進程中創建的路徑 。

CurrentDirectoryPath改變在整個過程中,而不是隻是的NSFileManager

+1

這與'man 2 chdir'和POSIX行爲一致。整個過程的路徑都改變了(包括調用open(),...) – Antzi 2014-11-06 03:50:02

+0

@Antzi確實如此。我錯誤地認爲這是NSFileManager將其用作路徑的「基礎」的屬性,但它更像是當前工作目錄的網關。 – SuitedSloth 2014-11-06 03:53:22