2012-02-25 12 views
0

MainViewControllerのNSMutableDictionaryから読み込まれたテキストでDetailViewController内にUITextViewがあります。ここにそのコードがあります。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で私は、視聴者が編集を行った場合、キーボードを隠すために使用する「保存」という名前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に保存したいと思っています。自己 アクション:@selector(didChangeValueForKey ターゲットをUIBarButtonItemStyleBordered: "保存" スタイル@:(またはそうでないかもしれないので、単純に)

私は `UIBarButtonItem * saveButton = [[UIBarButtonItemのalloc] initWithTitleにボタンを変更しました:)];

self.navigationItem.rightBarButtonItem = saveButton;` 

と他のコード。

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

[myDictionary setValue:[self myText].text forKey:@"textkey"]; 
[myText resignFirstResponder]; 

NSLog(@"%@", [myDictionary valueForKey:@"textkey"]); 

}

私のNSLogは変化を示しているが、私は、彼らはなくなっているアプリを再度開いたときに、保存されません。 1つはNSMutableDictionaryに直接保存できますか? 私は永続的なデータをたくさん読んでいます。 NSDataやPlistを考えてみましたが、うまくいかないかもしれません。

誰かがこれに関する良いチュートリアルを提案できますか?

私は推奨リンクを見て、これを(太字部分)を私のコードに追加しました。

` - (無効)didChangeValueForKey:あなたが見ることができるように(NSStringの*)キー{

/* 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]使用してパスを取得しようとしました。私はまだNSLogの変更を(いずれかの方法で)見ることができますが、ビューをリロードしたり、アプリケーションを再起動しても変更はありません。

私は、テキストビューのテキストのテキストファイルを辞書から取得した名前で保存して、mainViewControllerで選択されたイメージに応じて異なるdetailViewがロードされるたびに変更するようにしました。

これは、mainViewControllerの辞書項目です。

`IF((INT)インデックス== 0){ NSMutableDictionary * myDictionary = [NSMutableDictionaryのdictionaryWithObjectsAndKeys: //ここで私は私のDetailView にUITextViewにロードするテキストファイル名にアクセスしたいところです@」 (ID)、送信者{

:(空)saveAction - 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への変更を保存するために使用するコードです

[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]; 

} `

私はこれをチェックして、ファイルが最初のビューのテキストの名の下にドキュメントフォルダに保存され、それが変更されたテキストが含まれていません。

テキストファイルの内容を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エラー:NULL]; `

私はこの最後の行を交換コメントアウトされていないものが正常に動作します。知りたい人のために。

+0

あなたはこの問題に直面していますか?値が辞書などに置き換えられていません.... – iphonedev23

+0

テキストビューにテキストを追加してキーボードのボタンをタップしたときに、ビューを終了して再読み込みすると追加されたテキストが表示されないため、救われていない。 – user1114881

+1

あなたのtextViewDidChangeメソッドが確実に呼び出されていますか? –

答えて

0

データの永続性を実装する必要があります。テキストを永続的な記憶域に保存しておき、後でビューを再読み込みするときに再度取り出すことができます。

+0

私は私の元のポストの下にいくつかの変更を加えて、見てください。 – user1114881

+0

私はクイック検索を行い、これは私が得た最初のリンクです:http://stackoverflow.com/questions/7478440/how-to-save-a-nsmutabledictionary-into-a-file-in-documents。これにより、辞書の内容が指定できるファイルに保存されます。その後、必要に応じてこの特定の辞書の内容を後で読み込むことができます。 – XCool

+0

あなたの提案を見た後、上のコードを変更しました。 – user1114881

関連する問題