NSFileManager实例更改其他实例的currentDirectoryPath

时间:2014-11-06 03:30:00

标签: ios objective-c nsfilemanager

我在iOS应用程序中继承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?

我在iOS 7和8上尝试过SDK 7.1和8.1,结果相同。

1 个答案:

答案 0 :(得分:0)

我在documentation for NSFileManager找到了答案。

  

所有相对路径名隐含地指当前工作   目录。更改当前工作目录仅影响路径   在当前流程中创建。

CurrentDirectoryPath 针对整个流程而不仅仅是NSFileManager的实例进行了更改