gpt4 book ai didi

ios - 在应用程序文档文件夹中存储和获取文档

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:10:03 24 4
gpt4 key购买 nike

我正在编写一个文本编辑器应用程序,并试图将 NSString 作为 NSData 存储在文档文件夹中的文件中,例如,我希望能够存储文件“myText.java”。

我的代码在模拟器上运行。但是,在设备上似乎创建了一个文件,但是当我稍后尝试从文件加载数据时,我什么也得不到。

我是否必须设置一些项目设置才能启用设备上的文档目录,或者我的代码是否有误?

这是我的商店代码:

-(void) saveFile:(NSString*)file{
if (![file isEqual:@"Empty"]) {
NSArray *paths = NSSearchPathForDirectoriesInDomains
(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *fullFilePath = [documentsDirectory stringByAppendingPathComponent:file];

[[NSFileManager defaultManager] removeItemAtPath: fullFilePath error: nil];
NSLog(@"File: %@", fullFilePath);
//Above LOGS: /var/mobile/Applications/2310F459-282C-4488-AE24-D5795168F85A/Documents/fg

//save content to the documents directory
NSLog(@"Saving: %@", codeView.text);
// Logs the data i want to store
[[codeView.text dataUsingEncoding:NSASCIIStringEncoding] writeToFile:fullFilePath atomically:YES];
}
}

这是我的加载文件代码:

-(void) loadFile:(NSString*)filename{
NSArray *paths = NSSearchPathForDirectoriesInDomains
(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];

//make a file name to write the data to using the documents directory:
NSString *file = [documentsDirectory stringByAppendingPathComponent:filename];
if ([[NSFileManager defaultManager] fileExistsAtPath:file]) {
NSLog(@"File found");
//Yes the file is found

theDelegate.fileData = [NSData dataWithContentsOfFile:file];
NSLog(@"Data:%@",[[NSString alloc] initWithData:[NSData dataWithContentsOfFile:file] encoding:NSASCIIStringEncoding]);
// On device and simulator data is found

[theDelegate.codeView setText:[[NSString alloc] initWithData:theDelegate.fileData encoding:NSASCIIStringEncoding]];
//codeView does not get updated with the data.
//NSLog([[NSString alloc] initWithData:theDelegate.fileData encoding:NSASCIIStringEncoding]);
[theDelegate setTitle:filename];
[theDelegate setHasOpenFile:YES];
[theDelegate.codeView setEditable:theDelegate.hasOpenFile];
[theDelegate.codeView setNeedsDisplay];
[self setLanguage:filename];
}else{

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"File error!" message:@"An error occured when trying to load the selected file." delegate:self cancelButtonTitle:@"OK!" otherButtonTitles:nil, nil];
[alert show];
}
}

最佳答案

不,您不必启用设置即可使用文档目录。您的代码可能有也可能没有错误,无论如何它很难阅读而且不是很干净(很抱歉这么说。)

尽量只做一次。我冒昧地稍微重写了你的代码,以清理它。然后我用我手机上的示例应用程序对其进行了测试,它运行良好。

代码重写:

-(void) saveFile:(NSString*)filename{
if (![filename isEqual:@"Empty"]) {

NSString *fullFilePath = [self getFullFilePath:filename];

[[NSFileManager defaultManager] removeItemAtPath: fullFilePath error: nil];
NSLog(@"File: %@", fullFilePath);

//save content to the documents directory
NSLog(@"Saving: %@", self.codeView.text);
// Logs the data i want to store
[[self.codeView.text dataUsingEncoding:NSASCIIStringEncoding] writeToFile:fullFilePath atomically:YES];
}
}

上面的代码没问题,添加了辅助函数之后。

-(void) loadFile:(NSString*)filename{

NSString *fullFilePath = [self getFullFilePath:filename];

if ([[NSFileManager defaultManager] fileExistsAtPath:fullFilePath]) {
NSLog(@"File found");
//Yes the file is found

NSLog(@"Data:%@",[[NSString alloc] initWithData:[NSData dataWithContentsOfFile:fullFilePath] encoding:NSASCIIStringEncoding]);
// On device and simulator data is found

[theDelegate.codeView setText:[[NSString alloc] initWithData:[NSData dataWithContentsOfFile:fullFilePath] encoding:NSASCIIStringEncoding]];

[theDelegate setTitle:filename];
[theDelegate setHasOpenFile:YES];
[theDelegate.codeView setEditable:theDelegate.hasOpenFile];
[theDelegate.codeView setNeedsDisplay];
//[self setLanguage:filename];
}else{

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"File error!" message:@"An error occured when trying to load the selected file." delegate:self cancelButtonTitle:@"OK!" otherButtonTitles:nil, nil];
[alert show];
}
}

在您的旧代码中,如果引用较弱,theDelegate.fileData = [NSData dataWithContentsOfFile:file]; 可能存在问题。由于我假设您将始终在 codeView 中拥有代码,因此似乎没有必要先将其存储在成员变量中。此外,这可能会导致更多错误。

以下是辅助函数,因此您不会在两个函数中做完全相同的事情,因为这可能会导致错误。

-(NSString*) getFullFilePath:(NSString*)filename {
NSArray *paths = NSSearchPathForDirectoriesInDomains
(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *fullFilePath = [documentsDirectory stringByAppendingPathComponent:filename];

return fullFilePath;

}

关于ios - 在应用程序文档文件夹中存储和获取文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16699714/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com