私はノートアプリケーションで作業しており、コアデータに問題があります。私が抱えている問題は、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.はいといいえ。 doneボタンを押すと保存され、 'textViewDidChange'に移動することを考えていますが、それでも動作するはずです。 2.本当に良い点ですが、挿入したコードが存在するページ作成メソッドでNSlogを試してみました。必要なときに呼び出されるだけです。 – Anders
この髪の毛を少し紛失した。いつものように愚かな間違いだった。私のカスタムNSManagedObjectでは、 '@dynamic'にする必要があるときに' @ syntezise'としてテキストプロパティを実装しました。とにかく@Canopusと@gamBitありがとう – Anders