2012-01-05 7 views
1

私はノートアプリケーションで作業しており、コアデータに問題があります。私が抱えている問題は、NSManagedObjectオブジェクトのプロパティ(NSString)がアプリケーション終了後に更新されないということです。シナリオ:(1)ビルド&アプリを実行する、(2)何かを書く(UITextView)、(3)ホームボタン(背景)を押す、(5)アプリケーションを終了する、 7)テキストを編集する(またはテキストを削除する)、(8)ホームボタンを押す、(9)アプリを終了する、(10)アプリをもう一度開くと新しいテキストはそこにない。iOS NSManagedObjectプロパティを更新できません

私は、このコードスニペット/メソッドにエラーをローカライズしていると思う:私はNSLog(@"%@", currentPage.pageText);を実行すると、値が保存さ/更新されていないことを示して

// Helper method to change page, it takes one argument, tag of the next/prevoius page. 
// This method is called in viewWillAppear. 
- (void)goToPage:(int)tag 
{ 
    // Set up the new current page. 
    currentPage = [pageList objectAtIndex:tag]; 
    NSLog(@"%@", currentPage.pageText); // Returns the old value, not the updated. 
    if ([currentPage.inputType isEqualToString:@"drawing"]) { 
     [pageView changeToDrawing]; 
     toolSegment.selectedSegmentIndex = 0; 

     UIImage * pageImage = [UIImage imageWithData:currentPage.pageImage]; 
     pageView.canvas.image = pageImage; 
    } else if ([currentPage.inputType isEqualToString:@"text"]) { 
     [pageView changeToText]; 
     toolSegment.selectedSegmentIndex = 1; 

     pageView.pageText.text = currentPage.pageText; 
     if (editing) { 
      [undoButton removeFromSuperview]; 
      [redoButton removeFromSuperview]; 
     } 
    } 
    [self updateMenu]; 
} 

私はこのような値を設定します。

- (void)textViewDidEndEditing:(UITextView *)textView 
{ 
    currentPage.pageText = textView.text; 
} 

私は最初は、このように現在のページを設定します。私も

NSString * currentInputType; 
if (currentPage.inputType == @"drawing") { 
    currentInputType = @"drawing"; 
} else if ([currentPage.inputType isEqualToString:@"text"]) { 
    currentInputType = @"text"; 
} 

// Sets the current page. 
Page * newPage = [NSEntityDescription insertNewObjectForEntityForName:@"Page" inManagedObjectContext:moc]; 
newPage.createdAt = [NSDate date]; 
newPage.inputType = currentInputType; 

// Adds the new page to the database and to the pageList array. 
[pagesNoteblock addNoteblockPagesObject:newPage]; 
[pageList addObject:newPage]; 

// Sets the current page and clears the textView. 
currentPage = [pageList objectAtIndex:currentPageTag]; 

// Sets the current page to the last open page 
currentPageTag = pagesNoteblock.lastOpenPage; 
currentPage = [pageList objectAtIndex:currentPageTag]; 

そして、このような新しいページを作成しますviewWillDisapearsなどで呼び出されるページコンテンツを保存するヘルパーメソッドがあります。

// Method that saves the current page's image to the database. 
- (void)savePageContent 
{ 
    // Saves the image to the database. 
    if ([currentPage.inputType isEqualToString:@"text"]) { 
     currentPage.pageText = pageView.pageText.text; 
    } else if ([currentPage.inputType isEqualToString:@"drawing"]) { 
     NSData * coreDataImage = [NSData dataWithData:UIImagePNGRepresentation(pageView.canvas.image)]; 
     currentPage.pageImage = coreDataImage; 
    } 
    pagesNoteblock.lastOpenPage = currentPageTag; 
} 

ご協力いただきありがとうございます。

更新:「ページテキスト」オブジェクトは1回だけ書き込み可能です。すなわち、最初に作成したときに「保存可能」な変更を加えることができます。

答えて

1

私は2つのアイデアを持っていますが、かなり確実ではない:

  1. あなたは、よろしいですあなたはホームボタンを押したときにtextViewDidEndEditingが呼び出されていますか?
  2. 私は、あなたがしたいことを次の方法で行っていると思われます。

    ページ* newPage = [NSEntityDescription insertNewObjectForEntityForName:@ "ページ" inManagedObjectContext:moc];

このメソッドは、ページクラスの新しいインスタンス/レコードを挿入(または作成)します。すでに存在するレコードは更新されません。私はあなたがリクエストをフェッチするのを見ませんが、データベースからフェッチするときに配列を取得し、最初のもの(atIndex:0)だけを表示していると仮定します。

つまり、保存しますが、データベースリストの最後に新しいレコードとして保存します。既に表示されているものを更新していません。

+0

1.はいといいえ。 doneボタンを押すと保存され、 'textViewDidChange'に移動することを考えていますが、それでも動作するはずです。 2.本当に良い点ですが、挿入したコードが存在するページ作成メソッドでNSlogを試してみました。必要なときに呼び出されるだけです。 – Anders

+0

この髪の毛を少し紛失した。いつものように愚かな間違いだった。私のカスタムNSManagedObjectでは、 '@dynamic'にする必要があるときに' @ syntezise'としてテキストプロパティを実装しました。とにかく@Canopusと@gamBitありがとう – Anders

2

あなたはあなたのNSManagedObjectContextでsaveを呼び出すように見えませんが、アプリケーションを終了した後もオブジェクトが表示されますか?彼らは貯蓄ですか?これに似た

何かがあなたの挿入後に動作し、削除する必要があります:

NSError *error; 
[self.context save:&error]; 

self.contextは、あなたのNSManagedObjectContextが何であれています。

+0

こんにちは、私はappWillResignActiveとappWillTerminateで私のアプリデリゲート/コントローラの節約、(または何彼らは今(いない家と呼ばれている))を行います。私はあまりにも私の他のビューコントローラに保存する必要がありますか?この問題は、テキストビューでのみ発生し、アプリは「描画」をサポートしています。これは必要に応じて保存/更新されます。だから、問題は貯蓄以外のものと関係していると思う。 – Anders

関連する問題