我试图将核心数据对象从一个控制器传递到另一个控制器,而不保存更改。但是我得到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];
}
我之所以不想立即保存数据,是因为我想等到用户完成创建新项目的过程。
答案 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];
在这种情况下,您可以更改项目。