我在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,结果相同。
答案 0 :(得分:0)
我在documentation for NSFileManager找到了答案。
所有相对路径名隐含地指当前工作 目录。更改当前工作目录仅影响路径 在当前流程中创建。
CurrentDirectoryPath 针对整个流程而不仅仅是NSFileManager的实例进行了更改