Я буквально пробовал все. Я уверен, что моя ошибка будет чем-то таким глупым и маленьким, как пропущенный self .string, но я не могу заставить его работать. Моя мини-программа выполняет проверку, если файл с именем Code.txt уже существует. Если он делает, то он будет загружать файл в UITextView (и он делает это просто отлично). Если он не существует, он создаст имя файла Code.txt. Все это прекрасно.string = textView.text, но строка is (nul)
Однако, когда я пытаюсь сохранить текущий текст внутри UITextView в файл, я не могу сначала сохранить его в строке. Это то, что я пытаюсь достичь:
При выходе из приложения: textView.text --> codeString --> Code.txt [saved]
Кроме этого, опять же, я не могу сохранить textView.text в строку (codeString
). NSLog возвращает его как гайку (см. NSLog(@"String: %@", self.codeString);
в методе saveFile).
ViewController.h
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
#import "BuildViewController.h"
@interface ViewController : UIViewController <UITextViewDelegate>
@property (nonatomic, strong) NSString *codeString;
@property (nonatomic, retain) IBOutlet UITextView *textView;
@property (nonatomic, retain) BuildViewController *buildViewController;
- (void)saveFile;
@end
ViewController.m
#import "ViewController.h"
@interface ViewController()
@end
@implementation ViewController
@synthesize textView;
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
textView.delegate = self;
// Check if Code.txt exists
NSString* documentsDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *codeFile = [NSString stringWithFormat:@"%@/Code.txt", documentsDir];
BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:codeFile];
NSLog(@"viewWillAppear");
if (fileExists == true) {
// Code.txt does exist, continue to viewDidLoad
NSLog(@"Code.txt does exist");
}
else if (fileExists == false) {
// Code.txt does not exist, create the file
NSLog(@"Code.txt does not exist");
ViewController *viewController = [ViewController alloc];
[viewController createFile];
}
self.textView.delegate = self;
}
- (void)viewWillAppear:(BOOL)animated {
// Load Code.txt
NSString* documentsDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString* codeFile = [documentsDir stringByAppendingPathComponent:@"Code.txt"];
NSString *codeString = [NSString stringWithContentsOfFile:codeFile encoding:NSUTF8StringEncoding error:NULL];
textView.text = codeString;
NSLog(@"Loaded Code.txt");
}
- (void)saveFile {
// Save text to Code.txt
self.codeString = textView.text;
NSString *documentsDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *codeFile = [NSString stringWithFormat:@"%@/Code.txt", documentsDir];
[self.codeString writeToFile:codeFile
atomically:NO
encoding:NSStringEncodingConversionAllowLossy
error:nil];
NSLog(@"String: %@", self.codeString);
NSLog(@"Saved text to Code.txt");
}
- (void)createFile {
NSString *documentsDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *codeFile = [NSString stringWithFormat:@"%@/Code.txt", documentsDir];
NSString *codeString = @"print(\"Hello, world\")";
[codeString writeToFile:codeFile
atomically:NO
encoding:NSStringEncodingConversionAllowLossy
error:nil];
NSLog(@"Created Code.txt");
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
Где называется saveFile? –
@ JörnBuitink Извиняюсь, saveFile вызывается из приложения AppDelegateDidEnterBackground и applicationWillTerminate: 'ViewController * viewController = [ViewController alloc]; [viewController saveFile]; ' –
Вы действительно создаете новый экземпляр контроллера вида в' applicationDidEnterBackground'? – Avi