如何使用 NSManagedObject 对象在视图控制器之间传递自定义属性?
Posted
技术标签:
【中文标题】如何使用 NSManagedObject 对象在视图控制器之间传递自定义属性?【英文标题】:How to pass a custom property between view controller using NSManagedObject object? 【发布时间】:2014-04-17 14:09:27 【问题描述】:我正在开发一个简单的笔记应用程序,我在数据模型中创建了一个名为“Note”的实体,它只有一个名为“content”的 nsstring 类型的属性。
现在我使用编辑器从数据模型部分创建了一个 Note 类/创建 NSManagedObject 子类。
在我的创建笔记视图控制器中,我正在使用 prepareForSegue 方法将数据保存到数据库,如下所示:
@implementation NOCreateNotesViewController
- (NSManagedObjectContext *) managedObjectContext
NSManagedObjectContext *context = nil;
id delegate = [[UIApplication sharedApplication] delegate];
if ([delegate performSelector:@selector(managedObjectContext)])
context = [delegate managedObjectContext];
return context;
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
if (sender != self.saveButton) return;
if (self.noteText.text.length > 0)
self.note = [[Note alloc] init];
self.note.content = self.noteText.text;
NSManagedObjectContext * context = [self managedObjectContext];
// creating a new managed object
NSManagedObject *newNote = [NSEntityDescription insertNewObjectForEntityForName:@"Note" inManagedObjectContext:context];
[newNote setValue:self.noteText.text forKey:@"content"];
NSError * error = nil;
if ([context save:&error])
NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]);
但我不想通过这种方式传递用户想要编辑的对象(即表格视图中选定行中的注释):
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
if ([segue.identifier isEqualToString:@"editeNote"])
NSManagedObject * selectedNote = [self.notes objectAtIndex:[self.tableView indexPathForSelectedRow].row];
NOCreateNotesViewController * destination = [segue destinationViewController];
destination.note = selectedNote;
显然我不能传递一个带有指向 NSManagedObject 的指针的 Note 对象...这是因为如果这是一个编辑转场而不是创建一个新的转场,我想更新我的 Note 实体。
在tutorial I learned core data basics from 中,他们只使用动态创建对象进行教学,并注意使用编辑器/创建 NSManagedObject 子类的对象的自定义类,所以我有点困惑..
请帮忙
【问题讨论】:
【参考方案1】:NSManagedObject * selectedNote = [self.notes objectAtIndex:[self.tableView indexPathForSelectedRow].row];
想成为:
Note * selectedNote = [self.notes objectAtIndex:[self.tableView indexPathForSelectedRow].row];
为什么要在 prepareForSegue: 中将数据保存到模型中?您确定在视图中有保存或完成按钮吗?
【讨论】:
我有一个保存按钮。哦,我想我明白了,所以我应该将便笺传递给目标控制器,而不是在保存它时为 segue 做准备,我可以检查便笺 note 是否不是 nil 我保存了吗?以上是关于如何使用 NSManagedObject 对象在视图控制器之间传递自定义属性?的主要内容,如果未能解决你的问题,请参考以下文章
如何在单个托管对象上下文中初始化新的 NSManagedObject 并设置与另一个 NSManagedObject 的关系?
使用 CoreData,我如何确定 NSManagedObject 是不是在特定上下文中?
每次创建新对象时迭代 NSManagedObject 的属性
如何在不复制目标 NSManagedObject 的情况下将目标 NSManagedObject 添加到另一个具有反向多对多核心数据关系的对象?