我在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];`
我用未注释掉的那一行替换了最后一行,它工作正常。对于任何想要了解的人。
答案 0 :(得分:0)
您需要实现数据持久性,例如将文本保存到永久存储中,以后可以在以后重新加载视图时再次检索该文件。