/ / Podstawowe dane - lekka migracja - modele Cant Merge - iphone, cel-c, kod xcode, dane podstawowe

Migracja danych podstawowych - modele Cant Merge - iphone, target-c, xcode, core-data

Muszę dodać pewne atrybuty do mojego podstawowego modelu danych i mam straszny czas, aby migracja była łatwa!

Ciągle dostaję błąd "Cant łączą modele z dwoma różnymi bytami o nazwie blah".

Oto co zrobiłem ...

  1. Dodano ten kod do mojego delegata aplikacji.

    • (NSPersistentStoreCoordinator *) persistentStoreCoordinator {

      //bla bla

      NSDictionary * options = [Słownik NSDictionaryWithObjectsAndKeys:
      [NSNumber numberWithBool: YES], NSMigratePersistentStoresAutomaticallyOption,
      [NSNumber numberWithBool: YES], NSInferMappingModelAutomaticallyOption, nil];

      //bla bla

      return _persistentStoreCoordinator;
      }

  2. Kliknął mój model danych, poszedł do Design> Model danych> Dodaj wersję modelu.

  3. Wprowadziłem moje zmiany do tego z NAJNIŻSZYM numerem, zasadniczo dodając kilka atrybutów.

  4. Usunięto wszystkie zarządzane pliki utworzone z poprzedniego modelu, wysłałem je do kosza, a następnie utworzyłem nowe z nowego modelu.

  5. Oczyszczone wszystkie cele.

  6. Buduj i idź.

BŁĄD.

Proszę, pomóż. Wypróbowałem powyższe na wiele różnych sposobów i wiele innych rzeczy, za każdym razem wracając do czystej kopii mojego projektu i zaczynając od nowa, i nic mnie nie pominęło przez ten błąd.

Dzięki!

Odpowiedzi:

4 dla odpowiedzi № 1

No cóż, kolejne 6 godzin mojego życia całkowicie zmarnowałem, ponieważ Apple to banda ... cóż, zatrzymam się tam.

W każdym razie, dzięki tej uroczej osobie: http://linkroller.com/fullpage/ad/13754/?http://iphonedevelopment.blogspot.com/2009/09/core-data-migration-problems.html Udało mi się rozwiązać problem.

Postępujesz zgodnie z instrukcjami, które już podjąłem, a następnie musisz znaleźć następującą metodę:

- (NSManagedObjectModel *)managedObjectModel {

if (managedObjectModel != nil) {
return managedObjectModel;
}

managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];
return managedObjectModel;
}

i zmień go na:

- (NSManagedObjectModel *)managedObjectModel {

if (managedObjectModel != nil) {
return managedObjectModel;
}

NSString *path = [[NSBundle mainBundle] pathForResource:@"Foo" ofType:@"momd"];
NSURL *momURL = [NSURL fileURLWithPath:path];
managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:momURL];

return managedObjectModel;
}

gdzie foo to nazwa twojego pliku xcdatamodeld.

AAAAAARGH.


1 dla odpowiedzi nr 2

Naprawiłem główną migrację danych

pls po tych krokach

  1. Przejdź do funkcji zapisu AppDelegate.m

    -(NSPersistentStoreCoordinator *)persistentStoreCoordinator
    {
    if (__persistentStoreCoordinator != nil)
    {
    return __persistentStoreCoordinator;
    }
    
    NSString *databaseFilePath = [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"sampleiOS.sqlite"];
    
    NSURL *storeUrl = [NSURL fileURLWithPath: databaseFilePath];
    
    NSDictionary *_option = [NSDictionary dictionaryWithObjectsAndKeys:
    [NSNumber numberWithBool:YES],            NSMigratePersistentStoresAutomaticallyOption,
    [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
    NSError *error = nil;
    
    __persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
    
    if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:_option error:&error]) {
    
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
    
    }
    
    return __persistentStoreCoordinator;
    }
    
  2. następnie wybierz plik example.xcdatamodeld

  3. kliknij menu Edytor na górze => dodaj wersję modelu => utwórz nową wersję modelu "przykład 2.xcdatamodel", a następnie kliknij przycisk Zakończ.

  4. teraz pokaż dwa podstawowe modele danych wersji jeden jest źródłem "example.xcdatamodel" innym jest miejsce docelowe "example 2.xcdatamodel".

  5. teraz dodaj atrybut lub encję do nowej wersji datamodelu "example 2.xcdatamodel". następnie kliknij model danych grupy "example.xcdatamodeld". Po tym ustaw aktualną wersję być nowo utworzonym modelem danych "example 2.xcdatamodel".

Jak ustawić aktualną wersję

select show utilities => show inspector => wersjonowany podstawowy model danych. następnie ustaw aktualną wersję.