如何使用NSManagedObject对象在视图控制器之间传递自定义属性?

时间:2014-04-17 14:09:27

标签: ios objective-c core-data nsmanagedobject

我正在开发一个简单的笔记应用程序,我在数据模型中创建了一个名为“Note”的实体,该实体只有一个名为“content”的属性,类型为nsstring。

现在我在数据模型部分使用editor / create NSManagedObject子类来关注Note类。

在我的创建备注视图控制器中,我将数据保存到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实体,如果这是一个编辑segue而不是创建一个新的。

在他们教授的tutorial I learned core data basics from中,只需动态创建对象,并注意使用编辑器/创建NSManagedObject子类的对象的自定义类,所以我有点困惑..

请帮忙

1 个答案:

答案 0 :(得分:1)

NSManagedObject * selectedNote = [self.notes objectAtIndex:[self.tableView indexPathForSelectedRow].row];

希望成为:

Note * selectedNote = [self.notes objectAtIndex:[self.tableView indexPathForSelectedRow].row];

为什么要在prepareForSegue中将数据保存到模型中?当然,视图中有一个“保存”或“完成”按钮?