传递核心数据对象而不保存

时间:2016-05-09 01:12:57

标签: ios core-data magicalrecord magicalrecord-2.2

我试图将核心数据对象从一个控制器传递到另一个控制器,而不保存更改。但是我得到CoreData:错误:改变托管对象0x14f70f510

以下是代码:

- (void) collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {

NSManagedObjectContext *localContext = [NSManagedObjectContext MR_context];
Item *item  = [Item MR_createEntityInContext:localContext];
item.code = indexPath.row;

NextController *controller = [[NextController alloc] initWithItem:item];
[self.navigationController pushViewController:controller animated:YES];
}

我之所以不想立即保存数据,是因为我想等到用户完成创建新项目的过程。

3 个答案:

答案 0 :(得分:0)

试试这个:

在选择项目

时拨打电话以执行segue
- (void) collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {

    [self performSegueWithIdentifier:@"mySegue" sender:sender];

}

创建NSManagedObject并将其传递给您正在推送的视图控制器。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"mySegue"]) { 
        NSIndexPath *path = [self.tableView indexPathForSelectedRow];

        NSManagedObjectContext *localContext = [NSManagedObjectContext MR_context];
        Item *item  = [Item MR_createEntityInContext:localContext];
        item.code = path.row;

        CustomViewController *vc = [segue destinationViewController]
        [vc theNameOfTheNSManagedObjectInTheVCYouPushTo: item]
    }
}

答案 1 :(得分:0)

MagicalRecord建议的每次整个操作后保存,因为您的应用可能会随时崩溃或被用户终止。
还有一件事,[item MR_inContext:localContext]将获得该项的永久对象ID。这可能会有所帮助。

答案 2 :(得分:0)

您正在localContext中创建新实体,如果您想对其执行某些操作,则还应将此localContext作为参数传递。

我的意思是下一个:

NextController *controller = [[NextController alloc] initWithItem:item];

用作:

NextController *controller = [[NextController alloc] initWithItem:item yourLocalContext:localContext];

在这种情况下,您可以更改项目