У меня есть UITextView в DetailViewController с некоторым текстом, который загружается из NSMutableDictionary в MainViewController.Вот код для этого:
- (void) coverflowView:(TKCoverflowView*)coverflowView coverAtIndexWasDoubleTapped:(int)index{
DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
if ((int)index == 0) {
NSMutableDictionary *myDictionary = [NSMutableDictionary dictionaryWithObjectsAndKeys:
@"This is some text", @"textkey", nil];
detailViewController.myDictionary = myDictionary;
}
Я загрузил строку из этого в мой DetailViewController с этим кодом;
self.myText.text = [(NSMutableDictionary *)myDictionary objectForKey:@"textkey"];
Также в моем viewDidLoad я создал RightBarButton с именем 'Сохранить », который я использую, чтобы скрыть клавиатуру, когда зритель закончит редактирование.Я хотел бы, чтобы эта кнопка также сохраняла изменения, которые программа просмотра вводит в UITextView (а также оригинальный текст).Это код для rightBarButton;
UIBarButtonItem *saveButton =[[UIBarButtonItem alloc]
initWithTitle:@"Save"
style:UIBarButtonItemStyleBordered
target:self
action:@selector(textViewDidChange:)];
self.navigationItem.rightBarButtonItem = saveButton;
Наконец, у меня есть код, который вызывает textVidewDidChange и скрывает клавиатуру.Я пытаюсь также сохранить изменения в textView, но это не так.
-(void)textViewDidChange:(UITextView *)textView;
{
if( textView == myText )
[myDictionary setValue:myText.text forKey:@"textkey"];
[myText resignFirstResponder];
}
Может кто-нибудь помочь мне в этом.Я просто хочу сохранить изменения в UITextView обратно в NSMutableDictionary.(или, может быть, не так просто)
Я изменил кнопку на `UIBarButtonItem * saveButton = [[UIBarButtonItem alloc] initWithTitle: @" Сохранить "стиль: UIBarButtonItemStyleBordered target: self action: @selector (didChangeValueForKey :)];
self.navigationItem.rightBarButtonItem = saveButton;`
и другой код для;
`- (void) didChangeValueForKey: (NSString *) key {NSError * error;
[myDictionary setValue:[self myText].text forKey:@"textkey"];
[myText resignFirstResponder];
NSLog(@"%@", [myDictionary valueForKey:@"textkey"]);
}
Мой NSLog показывает изменения, но когда я снова открываю приложение, они пропадают, а не сохраняются.Можно ли сохранить непосредственно в NSMutableDictionary?Я много читаю на постоянных данных.Подумайте, NSData или Plist, но постарайтесь, поскольку я, возможно, не очень хорошо.
Может кто-то предложить хороший учебник по этому вопросу?
Я посмотрел на предложенную ссылку и добавил это (жирная часть) в мой код.
`- (void) didChangeValueForKey: (NSString *) key {
/* NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:[(NSMutableDictionary *)myDictionary objectForKey:@"textkey"]];*/
NSError *error;
[myDictionary setValue:[self myText].text forKey:@"textkey"];
**[myDictionary writeToFile:@"textkey" atomically:YES];**
[myText resignFirstResponder];
NSLog(@"%@", [myDictionary valueForKey:@"textkey"]);
}`
Как вы можете видеть, я также пытался получить путь, используя [NSHomeDirector] выше, а затем заменил @" textkey "с пути.Я все еще вижу изменения в NSLog (в любом случае), но нет никаких изменений, когда я перезагружаю представление или перезапускаю приложение.
У меня есть изменения, так что я сохраняю текстовый файл текста втекстовое представление с именем, полученным из словаря, так что каждый раз загружается различный detailView в зависимости от изображения, выбранного в mainViewController.
Это моя словарная запись в mainViewController;
`if ((int) index == 0) {NSMutableDictionary * myDictionary = [NSMutableDictionary dictionaryWithObjectsAndKeys: // здесь я хочу получить доступ к имени текстового файла для загрузки в UITextView в моем DetailView @ "первый текст просмотра", @ "textkey2",
//This is where I give the text file of the changed text its name for each different view of the DetailView
@"first View Text", @"textkey3",nil];
detailViewController.myDictionary = myDictionary;
}`
Далее приведен код, который я использую для сохранения изменений в textView с помощью UIbarbuttonright
`- (void) saveAction: (id) sender {
[self.myText2 resignFirstResponder];
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [documentPaths objectAtIndex:0];
NSString *documentTXTPath = [documentsDirectory stringByAppendingPathComponent:[(NSMutableDictionary *)myDictionary objectForKey:@"textkey3"]];
NSString *savedString = myText2.text;
NSLog(@"The Save file is:%@", savedString);
[savedString writeToFile:documentTXTPath atomically:YES
encoding:NSUTF8StringEncoding error:NULL];
} `
Я проверил это, и файл сохраняется в папке с документами под именем First View Text и содержит измененный текст.
У меня проблемы с загрузкой содержимого текстового файла в UITextView.Используя полученный код, я получаю путь к объекту textkey2 (первое представление текста), а не содержимое файла.
`NSString *textName = [myDictionary objectForKey:@"textkey2"];
NSArray *paths2 = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES);
NSString *documentsDirectory2 = [paths2 objectAtIndex:0];
NSString *fullPath2 = [documentsDirectory2 stringByAppendingPathComponent:textName];
/ * self.myText2.text = fullPath2; * / self.myText2.text = [NSString stringWithContentsOfFile: кодировка fullPath2: NSUTF8StringEncoding error: NULL]; `
Я заменил эту последнюю строку на ту, которая не закомментирована, и она работает нормально.Для тех, кто хочет знать.