gpt4 book ai didi

objective-c - 无法更新iOS NSManagedObject属性

转载 作者:行者123 更新时间:2023-12-01 19:24:14 24 4
gpt4 key购买 nike

我正在开发一个笔记应用程序,但在处理核心数据时遇到了一些麻烦。我遇到的问题是,终止应用程序后,我的NSManagedObject对象属性(NSString)上的内容未得到更新。场景:(1)生成并运行该应用程序,(2)编写一些内容(UITextView),(3)按下主屏幕按钮(背景),(5)终止该应用程序,(6)打开该应用程序,文本在那里,( 7)编辑文本(或删除文本),(8)按主页按钮,(9)终止应用程序,(10)再次打开应用程序,但新文本不存在。

我想我已将错误定位到以下代码段/方法:

// 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];
}

当我运行 NSLog(@"%@", currentPage.pageText);时,它表明该值尚未更新/保存。

我将值设置为:
- (void)textViewDidEndEditing:(UITextView *)textView
{
currentPage.pageText = textView.text;
}

我最初是这样设置当前页面的:
// Sets the current page to the last open page
currentPageTag = pagesNoteblock.lastOpenPage;
currentPage = [pageList objectAtIndex:currentPageTag];

并创建如下新页面:
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];

我还有一个应该保存页面内容的辅助方法,在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;
}

任何帮助/提示将不胜感激!

更新:澄清一下,看来“页面文本”对象只能写一次,即,我第一次创建该对象时只能对其进行“可更改”的更改。

最佳答案

我有两个想法,但不太确定:

  • 您确定吗,当按下主屏幕按钮时,会调用textViewDidEndEditing
  • 我怀疑以下方法正在执行您想要的操作。

    页面* newPage = [NSEntityDescription insertNewObjectForEntityForName:@“Page” inManagedObjectContext:moc];

  • 此方法为Page Class插入(或创建)新的实例/记录。它不会更新任何已存在的记录!我没有看到您获取请求,但是当您从数据库中获取信息时,您会得到一个数组,并且我假设您仅显示第一个(atIndex:0)。

    换句话说,您正在保存它,但是作为新记录保存在数据库列表的末尾。您没有更新已经显示的内容。

    关于objective-c - 无法更新iOS NSManagedObject属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8742479/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com