Курс 5 CoreData урок 4

swift
xcode
coredata

#1

всем привет !

Подскажите пожалуйста что делать . В конце у рока я компилирую и все компилируется но когда нажимаю кнопку сохранить все падает . Начал искать ошибку и не нашел решил все заново написать . И опять на том-же месте все падает , вот что пишет.

2016-03-16 19:43:03.573 CoreDataDemo[9080:1372284] the behavior of the UICollectionViewFlowLayout is not defined because:

2016-03-16 19:43:03.574 CoreDataDemo[9080:1372284] the item height must be less than the height of the UICollectionView minus the section insets top and bottom values, minus the content insets top and bottom values.

2016-03-16 19:43:03.574 CoreDataDemo[9080:1372284] The relevant UICollectionViewFlowLayout instance is <_UIAlertControllerCollectionViewFlowLayout: 0x7f993b636bd0>, and it is attached to <UICollectionView: 0x7f993d004000; frame = (0 120.667; 270 44); clipsToBounds = YES; gestureRecognizers = <NSArray: 0x7f993b6378c0>; layer = <CALayer: 0x7f993b6371f0>; contentOffset: {0, 0}; contentSize: {0, 0}> collection view layout: <_UIAlertControllerCollectionViewFlowLayout: 0x7f993b636bd0>.

2016-03-16 19:43:03.575 CoreDataDemo[9080:1372284] Make a symbolic breakpoint at UICollectionViewFlowLayoutBreakForInvalidSizes to catch this in the debugger.

2016-03-16 19:43:17.780 CoreDataDemo[9080:1372284] CoreData: error: -addPersistentStoreWithType:SQLite configuration:(null) URL:file:///Users/arsenkhachukov/Library/Developer/CoreSimulator/Devices/51EF1CEA-2ECD-4234-A5AE-4F98C1003C78/data/Containers/Data/Application/62F7438A-B2B8-4E45-8BF9-3A4365A01058/Documents/SingleViewCoreData.sqlite options:(null) … returned error Error Domain=NSCocoaErrorDomain Code=134100 “(null)” UserInfo={metadata={

NSPersistenceFrameworkVersion = 641;

NSStoreModelVersionHashes =     {

    Car = <cd7f1ca6 8062cd7b 7e044b40 e04ed73e 165af4b6 73cc79db b6141593 43367a7d>;

    Entity1 = <42ff7ced 97937a31 cbbbcad0 89013069 d4c35497 a7fb9df9 6932a0cb 875ff560>;

};

NSStoreModelVersionHashesVersion = 3;

NSStoreModelVersionIdentifiers =     (

    ""

);

NSStoreType = SQLite;

NSStoreUUID = "6F48A1E3-8579-4428-A4C7-8B909C851660";

"_NSAutoVacuumLevel" = 2;

}, reason=The model used to open the store is incompatible with the one used to create the store} with userInfo dictionary {

metadata =     {

    NSPersistenceFrameworkVersion = 641;

    NSStoreModelVersionHashes =         {

        Car = <cd7f1ca6 8062cd7b 7e044b40 e04ed73e 165af4b6 73cc79db b6141593 43367a7d>;

        Entity1 = <42ff7ced 97937a31 cbbbcad0 89013069 d4c35497 a7fb9df9 6932a0cb 875ff560>;

    };

    NSStoreModelVersionHashesVersion = 3;

    NSStoreModelVersionIdentifiers =         (

        ""

    );

    NSStoreType = SQLite;

    NSStoreUUID = "6F48A1E3-8579-4428-A4C7-8B909C851660";

    "_NSAutoVacuumLevel" = 2;

};

reason = "The model used to open the store is incompatible with the one used to create the store";

}

2016-03-16 19:43:17.782 CoreDataDemo[9080:1372284] Unresolved error Error Domain=YOUR_ERROR_DOMAIN Code=9999 “Failed to initialize the application’s saved data” UserInfo={NSLocalizedDescription=Failed to initialize the application’s saved data, NSLocalizedFailureReason=There was an error creating or loading the application’s saved data., NSUnderlyingError=0x7f993c95caf0 {Error Domain=NSCocoaErrorDomain Code=134100 “(null)” UserInfo={metadata={

NSPersistenceFrameworkVersion = 641;

NSStoreModelVersionHashes =     {

    Car = <cd7f1ca6 8062cd7b 7e044b40 e04ed73e 165af4b6 73cc79db b6141593 43367a7d>;

    Entity1 = <42ff7ced 97937a31 cbbbcad0 89013069 d4c35497 a7fb9df9 6932a0cb 875ff560>;

};

NSStoreModelVersionHashesVersion = 3;

NSStoreModelVersionIdentifiers =     (

    ""

);

NSStoreType = SQLite;

NSStoreUUID = "6F48A1E3-8579-4428-A4C7-8B909C851660";

"_NSAutoVacuumLevel" = 2;

}, reason=The model used to open the store is incompatible with the one used to create the store}}}, [NSLocalizedDescription: Failed to initialize the application’s saved data, NSLocalizedFailureReason: There was an error creating or loading the application’s saved data., NSUnderlyingError: Error Domain=NSCocoaErrorDomain Code=134100 “(null)” UserInfo={metadata={

NSPersistenceFrameworkVersion = 641;

NSStoreModelVersionHashes =     {

    Car = <cd7f1ca6 8062cd7b 7e044b40 e04ed73e 165af4b6 73cc79db b6141593 43367a7d>;

    Entity1 = <42ff7ced 97937a31 cbbbcad0 89013069 d4c35497 a7fb9df9 6932a0cb 875ff560>;

};

NSStoreModelVersionHashesVersion = 3;

NSStoreModelVersionIdentifiers =     (

    ""

);

NSStoreType = SQLite;

NSStoreUUID = "6F48A1E3-8579-4428-A4C7-8B909C851660";

"_NSAutoVacuumLevel" = 2;

}, reason=The model used to open the store is incompatible with the one used to create the store}]


#2

Удалите Ваше приложение с симулятора и заного запустите.


#3

подскажите пожалуйста как правильно удалять проект из хcode , поискал в интернете не чего толком не нашел


#4

Вам нужно удалить с симулятора приложение, а не из Xcode. Может быть поэтому не можете найти инструкцию. Запустите симулятор -> command+shift+h -> кликаете на значек приложения и удерживаете клик. После того как все иконки затрясутся, у них появятся крестики сверху. Просто нажимаете крестик и удаляете его. Потом просто запускаете снова Ваше приложение и все.


#5

большое спасибо что помогаете . Все получилось )))))))


#6

В этом же уроке:

func saveMark (mark: String) {
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        let context = appDelegate.managedObjectContext

Ошибка: Value of Type 'AppDelegate' has no member "managedObjectContext"

В чем может быть проблема?


#7

Проблема в том, что Вы, видимо, контекст в AppDelegate назвали как-то иначе, но не managedObjectContext.


#8

никаких изменений в AppDelegate не вносил. Возможно это обновление CoreData.

В уроке SaveContext выглядит вот так:

func saveContext() {
     if managedObjectContext.hasChanges
}

У меня же это выглядит как:

 func saveContext () {
        let context = persistentContainer.viewContext
        if context.hasChanges {
            do {
                try context.save()

т.е. managedObjectContext нигде не фигурирует в Core Data stack


#9

По сути stack сейчас (Swift 3) представлен в виде контейнера, внутри которого Вы уже и можете найти Ваш контекст.

Если Вы писали кода на Swift 2, то соответственно сейчас его нужно изменить, чтобы обращение к контексту шло через контейнер.


#10

как начинающему, мне трудно понять как именно изменить код, чтобы обращение к контексту шло через контейнер. я просто двигаюсь по урокам, и пытаюсь повторить то, что реализовано.
нагуглил решение:

let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext


#11

Да, сейчас Вы обращаетесь через контейнер, а раньше хвост был без контейнера, но сразу было свойство managedObjectContext. А то, что Вы нашли решение сами, так это лучший из возможных вариантов!


#12

Подскажите, пожалуйста, в уроке про CoreData указано сохранение данных в массив таким образом:

do {
try context.save()
spendingArray.append(testTwo)
print(“Saved”)

    } catch {
        print(error.localizedDescription)
    }

все отлично работает, но если я хочу помещать элемент не в конец массива, а в начало. Я меняю строку:
spendingArray.append(testTwo)
на:
spendingArray.insert(testTwo, at: 0)
но сохранение происходит все равно в последний элемент. Подскажите как это исправить


#13

Вы работаете с базой данных и там речи быть не может про сохраннеие в каком либо порядке.
Если вам нужен порядок, то это называется сортировкой, а это уже делается через нужное вам поле.