сохранение измененного текста в текстовом представлении, загруженном из NSMutableDictionary - PullRequest
0 голосов
/ 25 февраля 2012

У меня есть 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]; `

Я заменил эту последнюю строку на ту, которая не закомментирована, и она работает нормально.Для тех, кто хочет знать.

1 Ответ

0 голосов
/ 25 февраля 2012

Вам необходимо реализовать постоянство данных, например, сохранение текста в постоянном хранилище, которое вы можете получить снова, когда позже перезагрузите представление.

...