保存从NSMutableDictionary加载的textview中的已更改文本

时间:2012-02-25 02:53:40

标签: iphone uitextview nsmutabledictionary

我在DetailViewController中有一个UITextView,其中有一些文本是从MainViewController中的NSMutableDictionary加载的。这是代码;

- (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中,我创建了一个名为“Save”的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                                    目标:自                                  动作:@selector(didChangeValueForKey:)];

self.navigationItem.rightBarButtonItem = saveButton;`

和其他代码;

` - (void)didChangeValueForKey:(NSString *)key {        NSError *错误;

    [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中的更改(无论哪种方式),但是当我重新加载视图或重新启动应用程序时没有任何变化。

我已更改内容,以便在textview中保存文本的文本文件,其名称来自字典,以便每次根据在mainViewController中选择的图像加载不同的detailView。

这是我在mainViewController中的词典条目;

`if((int)index == 0){         NSMutableDictionary * myDictionary = [NSMutableDictionary dictionaryWithObjectsAndKeys:                       //这里是我想要访问我的DetailView中的UITextView中加载的文本文件名的位置                         @“首先查看文字”,@“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;
}`

接下来是我用来使用UIbarbuttonright

将更改保存到textView的代码

` - (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的名义保存在documents文件夹中,它确实包含更改的文本。

我在将文本文件内容加载到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 encoding:NSUTF8StringEncoding error:NULL];`

我用未注释掉的那一行替换了最后一行,它工作正常。对于任何想要了解的人。

1 个答案:

答案 0 :(得分:0)

您需要实现数据持久性,例如将文本保存到永久存储中,以后可以在以后重新加载视图时再次检索该文件。