Модель, яка використовується для відкриття магазину, несумісна з тією, що використовується для створення магазину


181

Я створив модель Core Data в xcode 3.2 і після оновлення до Xcode 4.2 я потім додав нову сутність підкласу NSManagedObject (див. Нову сутність).

По-перше, це виглядає дивно, оскільки воно не в тій самій групі, як стара. Ось малюнок на моєму xcode 4.2 (AlkitabDB - це той, який я створив у xcode 3.2, EndeDB - новий із поточної версії xcode (4.2):

нова сутність не групується в xdatamodel

По-друге, я дозволю це так, як є, тоді я отримав доступ до другої сутності (нової) так само, як і перша сутність (стара), і з'являється помилка під назвою.

Ось помилка:

2012-01-16 21:13:38.496 iHuria[55953:207] Unresolved error Error Domain=NSCocoaErrorDomain Code=134100 "The operation couldn’t be completed. (Cocoa error 134100.)" UserInfo=0x8829cd0 {metadata=<CFBasicHash 0x882a370 [0x1839b38]>{type = immutable dict, count = 7,
entries =>
    2 : <CFString 0x8829b90 [0x1839b38]>{contents = "NSStoreModelVersionIdentifiers"} = <CFArray 0x8829ff0 [0x1839b38]>{type = immutable, count = 0, values = ()}
    4 : <CFString 0x8829bc0 [0x1839b38]>{contents = "NSPersistenceFrameworkVersion"} = <CFNumber 0x8829770 [0x1839b38]>{value = +320, type = kCFNumberSInt64Type}
    6 : <CFString 0x8829bf0 [0x1839b38]>{contents = "NSStoreModelVersionHashes"} = <CFBasicHash 0x882a080 [0x1839b38]>{type = immutable dict, count = 1,
entries =>
    0 : <CFString 0x882a010 [0x1839b38]>{contents = "AlkitabDB"} = <CFData 0x882a030 [0x1839b38]>{length = 32, capacity = 32, bytes = 0xd02ac5f8be6ab0b39add450aca202ac0 ... 3d45d462998d2ccd}
}

    7 : <CFString 0x10e3aa8 [0x1839b38]>{contents = "NSStoreUUID"} = <CFString 0x8829e60 [0x1839b38]>{contents = "4F2EE7FF-463B-4055-BBED-8E603CDBDF59"}
    8 : <CFString 0x10e3948 [0x1839b38]>{contents = "NSStoreType"} = <CFString 0x10e3958 [0x1839b38]>{contents = "SQLite"}
    9 : <CFString 0x8829c40 [0x1839b38]>{contents = "NSStoreModelVersionHashesVersion"} = <CFNumber 0x6b1c7c0 [0x1839b38]>{value = +3, type = kCFNumberSInt32Type}
    10 : <CFString 0x8829c70 [0x1839b38]>{contents = "_NSAutoVacuumLevel"} = <CFString 0x882a0c0 [0x1839b38]>{contents = "2"}
}
, reason=The model used to open the store is incompatible with the one used to create the store}, {
    metadata =     {
        NSPersistenceFrameworkVersion = 320;
        NSStoreModelVersionHashes =         {
            AlkitabDB = <d02ac5f8 be6ab0b3 9add450a ca202ac0 ebd1e860 cbb578c2 3d45d462 998d2ccd>;
        };
        NSStoreModelVersionHashesVersion = 3;
        NSStoreModelVersionIdentifiers =         (
        );
        NSStoreType = SQLite;
        NSStoreUUID = "4F2EE7FF-463B-4055-BBED-8E603CDBDF59";
        "_NSAutoVacuumLevel" = 2;
    };
    reason = "The model used to open the store is incompatible with the one used to create the store";
}

Я раніше шукав рішення і виявив, що я повинен видалити прилад із тренажера та перезапустити додаток, і воно не спрацювало. Хтось знає рішення цього питання? Будь ласка, допоможіть.

Відповіді:


294

Видалення програми іноді не трапляється! Запропонуйте, ваш додаток уже опубліковано! Ви не можете просто додати нову сутність до бази даних та йти далі - вам потрібно виконати міграцію!

Для тих, хто не хоче заглиблюватися в документацію та шукає швидке виправлення:

  1. Відкрийте свій .xcdatamodeld файл
  2. натисніть на Редактор
  3. виберіть Додати версію моделі ...
  4. Додайте нову версію своєї моделі (додана нова група моделей даних)
  5. виберіть головний файл, відкрийте інспектор файлів (панель праворуч)
  6. і Versioned core data modelвиберіть нову версію моделі даних для поточної моделі даних
  7. ЦЕ НЕ ВСЕ) Ви повинні виконати так звану "легку міграцію".
  8. Перейдіть до свого AppDelegateі знайдіть, де persistentStoreCoordinatorстворюється
  9. Знайдіть цей рядок if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error])
  10. Замініть nilпараметри на @{NSMigratePersistentStoresAutomaticallyOption:@YES, NSInferMappingModelAutomaticallyOption:@YES}(фактично вказані в коментованому коді в цьому методі)
  11. Ось ви їдете, веселіться!

PS Це стосується лише легкої міграції. Щоб ваша міграція була кваліфікованою як легка міграція, ваші зміни повинні бути обмежені лише цією вузькою смугою:

  • Додайте або видаліть властивість (атрибут або відношення).
  • Зробіть незвичну властивість необов’язковою.
  • Зробіть необов'язковий атрибут необов’язковим, якщо ви надаєте значення за замовчуванням.
  • Додати або видалити об'єкт.
  • Перейменуйте ресурс.
  • Перейменуйте сутність.

Для Swift 4

coordinator.addPersistentStore(ofType: NSSQLiteStoreType, configurationName: nil, at: url, options: [NSMigratePersistentStoresAutomaticallyOption: true, NSInferMappingModelAutomaticallyOption: true])

2
головний файл - створена вами .xcdatamodel. Вам слід відкрити першу вкладку панелі "Утиліти" (права частина) та знайти "Версію моделі" (Xcode 5.1) та вибрати Поточне: "Ваша нещодавно створена .xcdatamodel"
Stas

1
@ Computer_whiz123, в XCode 5.1.1 це називається 'Model Version'
Стас

1
Як би я це зробив Свіфт?
Аддісон

2
Я отримую цю помилку: "CoreData: error: -addPersistentStoreWithType: Конфігурація SQLite: (null) URL: файл: ///...file.sqlite параметри: {NSInferMappingModelAutomaticallyOption = 1; NSMigratePersistentStoresAutomaticallyOption = 1;} ... помилка повернута помилка Домен = NSCocoaErrorDomain Code = 134130 "Операцію не вдалося завершити. (Помилка какао 134130.) "
КарменА

3
Варіанти let options = [ NSMigratePersistentStoresAutomaticallyOption: true, NSInferMappingModelAutomaticallyOption:true ]
швидкої

285

Вийміть додаток із тренажера та виконайте очищення свого проекту. Це повинно прояснити ці питання. Переконайтеся, що ви не працюєте у відладчику, коли ви видаляєте додаток, інакше він фактично не видалить його належним чином.

Якщо ви хочете переконатися, що його немає, перегляньте цей каталог Users/INSERT_YOUR_USER_HERE/Library/Application Support/iPhone Simulator/у папці свого додатка під версією запущеної версії.

Примітка. Це лише для розробки. Для виробництва потрібно здійснити якусь міграцію. Google "Основна міграція даних", легка міграція є найпростішою.


THX за відповів Філіппе, я спробував, і це не спрацювало :(, у вас є якісь інші пропозиції?
dejoong

Чи можете ви розмістити код, який ви використовуєте, створити модель та стійкий магазин у своєму делегаті програми?
Філіп Саборін

Це трохи нерозумно, чому це трапляється, і чому таке рішення робить трюк, але ось що .. не можу допомогти .. Nywaz, тут іде моє голосування .. найкраще, що я можу зробити зараз, щоб оцінити ваші вказівки .. дякую за допомогу. !!
Apple_iOS0304

Допомогли мені вирішити проблему в Xcode 4.6, де я помилково відправляв у смітник всі свої проекти: /
ramirogm

6
Це лише для розвитку! Для виробництва ви використовуєте версію моделі та міграцію. developer.apple.com/library/ios/#documentation/cocoa/Conceptual/…
Філіп Саборін

35

Просто додайте атрибут " Параметри" під час створення persistentStoreCoordinator у файлі AppDelegate.m для методу основних даних, як показано нижче

ЗАВДАННЯ-С

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
    if (_persistentStoreCoordinator != nil)
    {
        return _persistentStoreCoordinator;
    }

    NSLog(@"persistentStoreCoordinator___");
    NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"MyApp.sqlite"];

    NSMutableDictionary *options = [[NSMutableDictionary alloc] init];
    [options setObject:[NSNumber numberWithBool:YES] forKey:NSMigratePersistentStoresAutomaticallyOption];
    [options setObject:[NSNumber numberWithBool:YES] forKey:NSInferMappingModelAutomaticallyOption];

    NSError *error = nil;
    _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
    if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error])
    {
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }

    NSLog(@"persistentStoreCoordinator___2");
    return _persistentStoreCoordinator;
}

SWIFT

    lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator = {
    // The persistent store coordinator for the application. This implementation creates and returns a coordinator, having added the store for the application to it. This property is optional since there are legitimate error conditions that could cause the creation of the store to fail.
    // Create the coordinator and store
    let coordinator = NSPersistentStoreCoordinator(managedObjectModel: self.managedObjectModel)
    let url = self.applicationDocumentsDirectory.URLByAppendingPathComponent("SingleViewCoreData.sqlite")
    var failureReason = "There was an error creating or loading the application's saved data."

    // MAIN LINE OF CODE TO ADD
    let mOptions = [NSMigratePersistentStoresAutomaticallyOption: true,
                    NSInferMappingModelAutomaticallyOption: true]

    do {
        try coordinator.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: mOptions)
    } catch {
        // Report any error we got.
        var dict = [String: AnyObject]()
        dict[NSLocalizedDescriptionKey] = "Failed to initialize the application's saved data"
        dict[NSLocalizedFailureReasonErrorKey] = failureReason

        dict[NSUnderlyingErrorKey] = error as NSError
        let wrappedError = NSError(domain: "YOUR_ERROR_DOMAIN", code: 9999, userInfo: dict)
        // Replace this with code to handle the error appropriately.
        // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
        NSLog("Unresolved error \(wrappedError), \(wrappedError.userInfo)")
        abort()
    }

    return coordinator
}

Це вирішило мою проблему ..


1
Дякую за це повідомлення, воно дуже корисне
Субрамані

23

Відповідь: Видаліть додаток із симулятора, виконайте очищення та відновіть свій проект.

Примітка. Кожного разу, коли ви вносите зміни до визначення основних даних, видаліть додаток, встановлений на фізичному пристрої чи симуляторі, очистіть проект та заново створіть його.


Скидання вмісту та налаштувань у симуляторі вирішило проблему для мене! Дякую.
септерр

14

Так. Щойно ви видалите додаток на фізичному пристрої та відновіть його.


Це фактично вирішило мою проблему, а не прийняту відповідь. Дякую!
Ken W

що трапляється у виробництві, це не відповідь
Едуардо Оліверос

Це жахлива відповідь, вам потрібно додати міграцію до вашої нової моделі, інакше додаток вийде з
ладу

14

Для швидкого пошуку в AppDelegate.swift знайдіть рядок

try coordinator!.addPersistentStoreWithType(NSXMLStoreType, configuration:  nil, URL: url, options: nil )

і замінити його на

try coordinator!.addPersistentStoreWithType(NSXMLStoreType, configuration: nil, URL: url, options: [NSMigratePersistentStoresAutomaticallyOption: true, NSInferMappingModelAutomaticallyOption: true])

11

Я щойно провів кілька днів, бореться з цією помилкою, а також збився з об'єднаннямModelFromBundles і отримав помилку "Неможливо об'єднати моделі з двома різними об'єктами з назвою *".

Виявляється, основна проблема полягала в тому, що Xcode не видаляє старі ресурси з пристроїв, і у мене були старі версії моєї моделі даних (.mom файли), які викликали конфлікти. Ось чому видалення програми вирішило проблему на одному з моїх пристроїв.

Знайшовши цю публікацію в блозі через іншу відповідь, я зробив свою програму більш толерантною до старих моделей, змінивши цю лінію, яка шукає ВСІ файли .mom:

NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil];

до цього, що дивиться лише в каталозі Фільтри:

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

Я використовував рекурсивніPathsForResourcesOfType з цього питання, щоб вирішити це, записавши всі файли .mom у додатку:

NSArray *momPaths = [self recursivePathsForResourcesOfType:@"mom" inDirectory:[[NSBundle mainBundle] resourcePath]];
NSLog(@"All .mom files:%@",momPaths);

Я також використовував iExplorer для перегляду сторонніх файлів .mom (ще не намагався їх видалити).

Наведений нижче метод також був корисним. Це показало, що суб'єкт господарювання знаходився в об'єднаній моделі, поверненій [psc ManagedObjectModel], яка більше не існувала ні в одній з моїх моделей, ні в самому магазині. Це дозволило мені повірити, що на самому пристрої кешується стара модель, яку чиста будівля не видаляє. Метод записує в журнал кожну сутність, яка була однаковою, змінена або додана до моделі або видалена з неї. (написано з цієї відповіді ТА як вихідна точка):

- (BOOL)comparePersistentStore:(NSPersistentStoreCoordinator *)psc withStoreURL: (NSURL *)storeURL {
    NSError *error = nil;

    // Get the entities & keys from the persistent store coordinator
    NSManagedObjectModel *pscModel = [psc managedObjectModel];
    NSDictionary *pscEntities = [pscModel entitiesByName];
    NSSet *pscKeys = [NSSet setWithArray:[pscEntities allKeys]];
    //NSLog(@"psc model:%@", pscModel);
    //NSLog(@"psc keys:%@", pscKeys);
    NSLog(@"psc contains %d entities", [pscModel.entities count]);

    // Get the entity hashes from the storeURL
    NSDictionary *storeMetadata = [NSPersistentStoreCoordinator metadataForPersistentStoreOfType:NSSQLiteStoreType
                                                                                          URL:storeURL
                                                                                        error:&error];
    NSDictionary *storeHashes = [storeMetadata objectForKey:@"NSStoreModelVersionHashes"];
    //NSLog(@"store metadata:%@", sourceMetadata);
    NSLog(@"store URL:%@", storeURL);
    NSLog(@"store NSStoreUUID:%@", [storeMetadata objectForKey:@"NSStoreUUID"]);
    NSLog(@"store NSStoreType:%@", [storeMetadata objectForKey:@"NSStoreType"]);
    NSSet *storeKeys = [NSSet setWithArray:[storeHashes allKeys]];

    // Determine store entities that were added, removed, and in common (to/with psc)
    NSMutableSet *addedEntities = [NSMutableSet setWithSet:pscKeys];
    NSMutableSet *removedEntities = [NSMutableSet setWithSet:storeKeys];
    NSMutableSet *commonEntities = [NSMutableSet setWithSet:pscKeys];
    NSMutableSet *changedEntities = [NSMutableSet new];
    [addedEntities minusSet:storeKeys];
    [removedEntities minusSet:pscKeys];
    [commonEntities minusSet:removedEntities];
    [commonEntities minusSet:addedEntities];

    // Determine entities that have changed (with different hashes)
    [commonEntities enumerateObjectsUsingBlock:^(NSString *key, BOOL *stop) {
        NSData *storeHash = [storeHashes objectForKey:key];
        NSEntityDescription *pscDescrip = [pscEntities objectForKey:key];
        if ( ! [pscDescrip.versionHash isEqualToData:storeHash]) {
            if (storeHash != nil && pscDescrip.versionHash != nil) {
                [changedEntities addObject:key];
            }
        }
    }];

    // Remove changed entities from common list
    [commonEntities minusSet:changedEntities];

    if ([commonEntities count] > 0) {
        NSLog(@"Common entities:");
        [commonEntities enumerateObjectsUsingBlock:^(NSString *key, BOOL *stop) {
            NSData *storeHash = [storeHashes objectForKey:key];
            NSEntityDescription *pscDescrip = [pscEntities objectForKey:key];
            NSLog(@"\t%@:\t%@", key, pscDescrip.versionHash);
        }];
    }
    if ([changedEntities count] > 0) {
        NSLog(@"Changed entities:");
        [changedEntities enumerateObjectsUsingBlock:^(NSString *key, BOOL *stop) {
            NSData *storeHash = [storeHashes objectForKey:key];
            NSEntityDescription *pscDescrip = [pscEntities objectForKey:key];
            NSLog(@"\tpsc   %@:\t%@", key, pscDescrip.versionHash);
            NSLog(@"\tstore %@:\t%@", key, storeHash);
    }];
    }
    if ([addedEntities count] > 0) {
        NSLog(@"Added entities to psc model (not in store):");
        [addedEntities enumerateObjectsUsingBlock:^(NSString *key, BOOL *stop) {
            NSEntityDescription *pscDescrip = [pscEntities objectForKey:key];
            NSLog(@"\t%@:\t%@", key, pscDescrip.versionHash);
        }];
    }
    if ([removedEntities count] > 0) {
        NSLog(@"Removed entities from psc model (exist in store):");
        [removedEntities enumerateObjectsUsingBlock:^(NSString *key, BOOL *stop) {
            NSData *storeHash = [storeHashes objectForKey:key];
            NSLog(@"\t%@:\t%@", key, storeHash);
        }];
    }

    BOOL pscCompatibile = [pscModel isConfiguration:nil     compatibleWithStoreMetadata:storeMetadata];
    NSLog(@"Migration needed? %@", pscCompatibile?@"no":@"yes");

    return pscCompatibile;
}

використання: викликається перед додаванням кожного магазину до NSPersistentStoreCoordinator:

    [self comparePersistentStore:self.psc withStoreURL:self.iCloudStoreURL];
    _iCloudStore = [self.psc addPersistentStoreWithType:NSSQLiteStoreType
                                          configuration:nil
                                                    URL:self.iCloudStoreURL
                                                options:options
                                                  error:&localError];

10

Кожен раз, коли ви вносите зміни до визначення основної дати, ви повинні видаляти додатки, встановлені на фізичному пристрої чи симуляторі.


20
Що про виробничі додатки? Вони миттєво вийдуть із ладу, якщо ви натиснете оновлення в App Store зі змінами основних даних? Thx
rwyland


3
Так, зміни в моделі CD не дозволяють завантажувати дані, створені з попередньою моделлю. Щоб вирішити це, вам потрібно виявити проблему та зробити міграцію основних даних.
Йоган


7

Найпростіше рішення, яке працювало для мене у Swift 2.1, Xcode 7:

  1. Видаліть додаток із симулятора (Cmd + Shift + H, щоб перейти на головний екран. Довго натискайте додаток, клацніть хрест, просто звичайний спосіб видалення програми зі свого телефону)

  2. Cmd + Shift + H знову, щоб зупинити танці програм

  3. Поверніться до свого проекту та повторіться

У мене виникла ця проблема під час написання / читання з основних даних із створеними двома об'єктами. Видалення програми та перезапуск програми виправили проблему


2
погана практика у виробництві, вийшов з
ладу

6

Щойно я видалив [Simulator App Folder]/Document/*.sqliteфайл після внесення змін до об'єктів, і він працював. І звичайно, .sqlite файл містить всі збережені дані та структури, які будуть втрачені.


2
Працював і для мене. Здається розумним, що цього має бути достатньо. Ви втратите всі дані вже в БД , хоча ...
борового

6

Видаліть програму з тренажера та очистіть код і запустіть. Його добре працює. Це може допомогти ВАМ.


6

Якщо ви використовуєте Swift.

Дотримуйтесь відповіді на @Stas та вставляйте замість нуля параметри у своєму делегатові додатків:

let myOptions = [NSMigratePersistentStoresAutomaticallyOption: true,
            NSInferMappingModelAutomaticallyOption: true]
        if coordinator!.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: myOptions, error: &error) == nil {

1
Не впевнений, чому це було проголосовано, але я це висловив. Дякуємо за надання синтаксису для Swift.
Метт Лонг

Приємно! Це працює! спасибі! Я намагаюся вирішити цю проблему протягом 3 годин.
mr_ivan777

куди поставити цей код? я завантажую основні дані за допомогою цього коду, нехай контейнер = NSPersistentContainer (ім'я: "modeldb") container.loadPersistentStores (завершенняHandler: {(storeDescription, помилка), якщо дозволити помилку = помилка як NSError? {
MAS. Джон

5

Спробуйте "Скинути вміст і налаштування" в тренажері. Працював для мене після видалення програми та чистої збірки


3
Якщо це зробити, однак, чи не все ж виникне така ж проблема у користувачів на реальних машинах?
Maury Markowitz

4

У мене виникло таке ж питання з моїм додатком (ще не випущено в App Store).

Ось як я це виправив:

  1. Запустити чисто (Cmd + Shift + K)
  2. Перезавантажте iOS Simulator
  3. iOS Simulator -> Скидання вмісту та налаштувань (з навігації)

(3) це був крок, який, нарешті, змусив його працювати належним чином. Сподіваюся, це допомагає!


2

Хоча іноді ви можете просто видалити додаток із пристрою, змінюючи схему в керованій об'єктній моделі, у деяких сценаріях це неможливо, наприклад, оскільки ви вже опублікували додаток зі старою схемою.

Якщо це так, вам потрібно подбати про переміщення старих даних до нової схеми:

Версія основної моделі даних та міграція даних



2

Якщо ви внесете зміни до вашої основної моделі даних, ви повинні надати політику міграції, яка розповість Core Data, як прийняти існуючі персистуючі об'єкти (які ваші користувачі створили з випущеною в даний час версією) до нової моделі.

У деяких сценаріях Core Data здатний автоматично зробити висновок про відображення зі старої моделі до нової. Для більш складних змін вам, можливо, доведеться реалізувати певну логіку, яка виконує міграцію.

Докладні відомості можна знайти в Посібнику з версії базової моделі даних та міграції даних .

Оновіть
цю відповідь тут на "Переповнення стека", охоплює основи легкої міграції основних даних, а також є якийсь код для початку роботи.


Ось моя відповідь на те ж саме для міграції даних: stackoverflow.com/questions/8881453 / ...
Dhaval H. Нен

1

Ця проблема, як правило, виникає через несумісність між версією, на якій створено БД . Загальний підхід до цієї проблеми полягає в тому, щоб видалити додаток і перевстановити його. Але у вашому згаданому випадку версія БД зовсім інша на Xcode 3.2 та 4.2. Тому краще використовувати ту саму версію Xcode для БД.


1

По-перше, єдині речі, які повинні бути в xcdatamodeldкомплекті, - це xcdatamodelфайли. Ваші підкласи НЕ повинні бути в xcdatamodeld. Перенесіть їх звідти. Є велика ймовірність, що вони плутають компілятора.

По-друге, помилка вказує на те, що Core Data не може знайти вашу модель. Ви створили дані, а потім торкнулися моделі? Якщо це так, ви перебуваєте в непослідовному стані і вам потрібно це виправити, видаливши дані (що запропонував Філіпп) або прокрутивши зміни моделі BACK .


у вас є ідея, як я можу зняти модель з пакета xcdatamodel? або shd я просто видалити його?
dejoong

Модель, яка є xcdatamodelфайлом, повинна бути там. Файли .h та .m потрібно перемістити. Використовуйте Finder.
Маркус С. Зарра

0

Я отримував помилку, але причина, коли я отримувала помилку, була через наступне.

Спочатку я мав одну сутність під назвою "Вступ" і мав один рядок, збережений для цього об'єкта в базі даних. Потім я додав ще одну особу під назвою "Особа", а після додавання, який перейшов до створення та отримав помилку. Тому я вирішив проблему, видаливши Entity "Person", а потім створивши додаток, видалив рядок, який був у "Entry", а потім закрив програму. Потім я видалив додаток повністю зі свого телефону, а потім переробив, і він працював чудово. Не впевнений, який крок виправив проблему (видалення рядка чи програми), але, сподіваємось, якщо ви шукаєте рішення, це допоможе. :)

Редагувати: О, і якщо ви турбуєтесь про видалення нової сутності (в моєму випадку "Особа"), щоб створити додаток ще раз, пам’ятайте, що ви зможете повернути його згодом, використовуючи CMD + Z!


0

У мене була ця проблема - спершу скидаю свій тренажер, а потім прибираю проект та відновлюю. І тоді це працює.


0

Коли ви змінюєте основні дані (додаючи поле до таблиці, видаляючи поле тощо), файл sqlite в папці документів програми повинен синхронізуватися з вашою схемою.

Цей файл не перезаписаний за замовчуванням, цей файл потрібно відновити.

Виконайте такі дії:

  1. Перейдіть до папки, вказаної NSURL. (Цей шлях можна знайти в повідомленні про виключення, згенерованому програмою перед збоєм.) Приклад: / Користувачі // Бібліотека / Підтримка програм / iPhone Simulator // Програми // Документи

  2. видаліть або перейменуйте файл sqlite

  3. Очистіть та перезапустіть додаток
  4. Програма, що перезапускається, створить новий файл sqlite.

Це забезпечить синхронізацію схеми та Xcode.


-1

Для розробки додатків Mac:

  1. Очистіть проект
  2. Очистити отримані дані
  3. Перейдіть до / Користувачі / YOUR_NAME / Бібліотека / Контейнери / YOUR_APP_BUNDLE_ID / Дані / Документи / та видаліть усі файли всередині (наприклад, ".sqlite", ".sqlite-shm" ...)

Це працювало для мене, сподіваюся, це може бути корисним.


-2

iOS Simulator -> Скидання вмісту та налаштувань ...

Працювали для мене

iOS Simulator -> Скидання вмісту та налаштувань ... -> Скидання також працює на iOS9 (xcode 7.1)


4
погана практика у виробництві, вийшов з
ладу
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.