Незаконная попытка установить связь между объектами в разных контекстах - PullRequest
2 голосов
/ 23 мая 2011

У меня есть два managedobjectcontext

Я выбираю объект из managedobjectcontext1 и хочу, чтобы два сохранили его во втором объектном контексте, при попытке сделать это, я получаю ошибку: «Недопустимая попытка установить связь междуобъекты в разных контекстах ".Код, который я использую

    NSError * error;

    NSPersistentStoreCoordinator *persistentStoreCoordinator_OLD;
    NSPersistentStoreCoordinator *persistentStoreCoordinator_NEW;

    NSManagedObjectModel *managedObjectModel_OLD;
    NSManagedObjectModel *managedObjectModel_NEW;


    NSManagedObjectContext *managedObjectContext_OLD;
    NSManagedObjectContext *managedObjectContext_NEW;


    NSURL *storeUrl_OLD = [NSURL fileURLWithPath: [[self applicationPrivateDocumentsDirectory] stringByAppendingPathComponent: @"CoreDataTutorialPart4.sqlite"]]; //   CoreDataTutorialPart4.sqlite
    NSURL *storeUrl_NEW = [NSURL fileURLWithPath: [[self applicationPrivateDocumentsDirectory] stringByAppendingPathComponent: @"Newpaxera.sqlite"]]; //   CoreDataTutorialPart4.sqlite



    // ADJUST THE MODEL

    managedObjectModel_OLD = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];  

    managedObjectModel_NEW = [[NSManagedObjectModel mergedModelFromBundles:nil] retain]; 





    persistentStoreCoordinator_OLD = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:managedObjectModel_OLD];
    if (![persistentStoreCoordinator_OLD addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl_OLD options:nil error:&error]) {
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);

    }
    else {
        NSLog(@"SUCCESS");
    }

    persistentStoreCoordinator_NEW = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:managedObjectModel_NEW];
    if (![persistentStoreCoordinator_NEW addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl_NEW options:nil error:&error]) {
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);

    }
    else {
        NSLog(@"SUCCESS");
    }

    managedObjectContext_OLD = [[NSManagedObjectContext alloc] init];
    [managedObjectContext_OLD setPersistentStoreCoordinator: persistentStoreCoordinator_OLD];

    managedObjectContext_NEW = [[NSManagedObjectContext alloc] init];
    [managedObjectContext_NEW setPersistentStoreCoordinator: persistentStoreCoordinator_NEW];

NSFetchRequest *fetchRequest_Study = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity_Study = [NSEntityDescription 
                                   entityForName:@"Studies" inManagedObjectContext:managedObjectContext_OLD];
    [fetchRequest_Study setEntity:entity_Study];

    NSMutableArray *StudiesList = [managedObjectContext_OLD executeFetchRequest:fetchRequest_Study error:&error];


    for(int i =0 ; i < [StudiesList count] ; i++){

        Studies  *study = [StudiesList objectAtIndex: i ];

        Studies *study_NEW = (Studies *)[NSEntityDescription insertNewObjectForEntityForName:@"Studies" inManagedObjectContext:managedObjectContext_NEW];

        study_NEW.SudyID = study.SudyID;
        study_NEW.StudyDate=study.StudyDate;
        study_NEW.ModalityName=study.ModalityName;

        study_NEW.Studiesstudent = study.Studiesstudent ; // raise sigapart error here 

Studiesstudent, является объектом другого класса сущности

Есть предложения, как решить эту проблему?Xcode не выдает ошибку в других числовых или строковых данных.

1 Ответ

2 голосов
/ 24 мая 2011

Нельзя переносить управляемые объекты между контекстами, особенно когда они инициализируются в других постоянных хранилищах.Вам необходимо клонировать управляемые объекты в новом контексте, т.е. создать новые объекты с теми же атрибутами, что и у старого.

Вы уверены, что вам не нужно переносить постоянные хранилища?Похоже, вы пытаетесь обновить существующий магазин до новой модели.Для этого и нужна миграция.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...