在Xcode中制作的mac的Objective-c程序中,我有保存和加载保存文件的方法。这些方法运行正常,但是当我尝试将其操作连接到菜单栏项目(即“文件”菜单下的“保存并加载”)时,保存已停止工作。它正确运行了该方法,但实际上并没有保存到保存文件中。
当我从菜单栏项目中断开操作并将其恢复到以前的状态时,它仍然无法正常工作。
这是Xcode的一个错误,如果你超过了默认的保存和加载操作吗?因为现在我的程序坏了,我无法找到解决方法。
方法中的代码与此类似:
- (IBAction)saveGame: (id)sender{ // saving the game
[self saveAlert];
NSString *saveFileContents = [NSString stringWithFormat:@"#%d #%d", int1, int2];
NSString *file_path = [[NSBundle mainBundle] pathForResource:@"save" ofType:@"txt"];
NSString *whatWrite = [NSString stringWithFormat:@"%@",saveFileContents];
[whatWrite writeToFile:file_path atomically:YES encoding:NSUTF8StringEncoding error:Nil];
self.feedLabel.stringValue = @"You just saved";
}
- (IBAction)loadGame: (id)sender{ //loading the save
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"save" ofType:@"txt"];
NSString *aString = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:Nil];
NSMutableArray *substrings = [NSMutableArray new];
NSScanner *scanner = [NSScanner scannerWithString:aString];
[scanner scanUpToString:@"#" intoString:nil];
while(![scanner isAtEnd]) {
NSString *substring = nil;
[scanner scanString:@"#" intoString:nil];
if([scanner scanUpToString:@" " intoString:&substring]) {
[substrings addObject:substring];
}
[scanner scanUpToString:@"#" intoString:nil];
}
int1 = [[substrings objectAtIndex:0] intValue];
int2 = [[substrings objectAtIndex:1] intValue];
}
当我运行程序并保存时,它表示已保存并且方法[self saveAlert]
按预期运行。但是,当我加载时,它会加载一个保存文件,当没有被覆盖的保存时(即加载时不先保存),该保存文件是默认的保存文件。因此,问题可能是储蓄存在问题?
当我在一个单独的程序中运行代码时,代码工作得非常好,在我将操作连接到文件菜单之前保存并加载,所以我认为问题不存在。
如果您需要更多信息,我们将不胜感激。感谢。
答案 0 :(得分:0)
现有代码不会覆盖save.text文件的原因是应用程序无法覆盖其资源。
这是包含应用程序本身的bundle目录。不要在此目录中写任何内容。为防止篡改,bundle目录在安装时签名。写入此目录会更改签名并阻止您的应用程序再次启动。
而是写入您的文档目录。您可以像这样获取文档目录的路径:
NSString * docsDir = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
你只需将你的save.text文件复制如下
请注意,iOS上的NSHomeDirectory()简单地返回应用程序包的路径。获得文档目录的路径后,您可以写入资源,例如save.text,如下所示:
NSString * path = [docsDir stringByAppendingPathComponent:@"save.text"];
[myString writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:nil];
您可以在文档目录中随时编辑文件。
参考:-[NSString writeToFile:] does not change the contents of the file