Перезагрузить весь основной объект данных, а не добавлять определенные данные

Я очень новичок в iOS. Я совершенно новичок в Core Data. Я беру кодовую базу проекта от бывших аспирантов моего профессора.

Когда мое приложение извлекает изображение из своей базы данных, путь к img следующий:

/Users/matt/Library/Developer/CoreSimulator/Devices/DA58E774-84BE-48F6-B50F-5921F682E87B/data/Containers/Bundle/Application/DA30DEFB-D90B-4D52-8462-3F8A5F4C55ED/Leaflet-US.app/thumbnail/species/Abies fraseri/images/LTV-BAM-2848_crop.jpg

Поскольку CoreSimulator/Devices включен в путь, я предполагаю, что он ищет изображение в основных данных приложения. Я могу ошибаться, поэтому, пожалуйста, поправьте меня, если я ошибаюсь.

У меня также есть версия эскиза в файле ресурсов моего приложения, который, как вы видите, содержит каталог Abies fraseri.

введите здесь описание изображения

Прямо сейчас в Core Data нет каталога Abies fraseri. Я знаю это, потому что в терминале я могу cd войти в /Users/matt/Library/Developer/CoreSimulator/Devices/DA58E774-84BE-48F6-B50F-5921F682E87B/data/Containers/Bundle/Application/DA30DEFB-D90B-4D52-8462-3F8A5F4C55ED/Leaflet-US.app/thumbnail/species/ и убедиться, что Abies fraseri не существует. Я хотел бы обновить версию thumbnail/species основных данных, чтобы она была.

Из того, что я увидел в этих сообщениях вы обновляете объект основных данных, добавляя определенный ключ/ пара значений в массив, полученный в результате выборки.

Пример:

NSManagedObject *entityNameObj = [NSEntityDescription insertNewObjectForEntityForName:@"EntityName" inManagedObjectContext:context];
[entityNameObj setValue:@"someValue" forKey:@"someKey"];

Однако есть ли способ удалить и повторно ввести миниатюру вместо того, чтобы проходить и указывать каждую новую пару значений ключа? Я спрашиваю, потому что я обновил локальную базу данных, эскиз, с 200 новыми видами, каждый из которых представляет собой каталог с несколькими изображениями.

Запрос на выборку, если он применяется:

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSManagedObjectContext* context = [(LeafletAppDelegate*)[[UIApplication sharedApplication] delegate] managedObjectContext];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Species" inManagedObjectContext:context] ;
    [fetchRequest setEntity:entity];


    if (predicate)
    {
        [fetchRequest setPredicate:predicate];
    }

    [fetchRequest setSortDescriptors:sortDescriptors];

    // Create and initialize the fetch results controller.
    NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:context sectionNameKeyPath:sectionNameKeyPath cacheName:nil];

    self.fetchedResultsController = aFetchedResultsController;
    fetchedResultsController.delegate = self;

    // Memory management.
    [aFetchedResultsController release];
    [fetchRequest release];

    return fetchedResultsController;

person maddie    schedule 27.06.2017    source источник
comment
Что вы подразумеваете под обновлением всех основных данных?   -  person yoninja    schedule 27.06.2017
comment
У меня есть папка с именем thumbnail в коде моего приложения. Он служит моей локальной базой данных, и я могу изменить ее в Finder. Тем не менее, есть также версия миниатюры, которая является основными данными, она находится в /Users/matt/Library/Developer/CoreSimulator/Devices/DA58E774-84BE-48F6-B50F-5921F682E87B/data/Containers/Bundle/Application/...... Я хотел бы обновить версию основных данных, чтобы она была идентична той, что у меня есть в файлах моего проекта.   -  person maddie    schedule 27.06.2017
comment
Я с @yoninja, потому что до сих пор не могу понять, что вы пытаетесь здесь сделать.   -  person Tom Harrington    schedule 27.06.2017
comment
@TomHarrington Я переформулировал большую часть поста, пытаясь сделать его более понятным!   -  person maddie    schedule 28.06.2017
comment
@TomHarrington, ты решил это?   -  person yoninja    schedule 14.07.2017


Ответы (1)


Поскольку CoreSimulator/Devices включен в путь, я предполагаю, что он ищет изображение в основных данных приложения. Я могу ошибаться, поэтому, пожалуйста, поправьте меня, если я ошибаюсь.

Вы ошибаетесь. Ничего не попадает в Core Data, если только вы не сделаете определенные вызовы Core Data для сохранения данных там. «CoreSimulator» в пути означает, что вы просматриваете файлы, используемые симулятором, и не имеет никакого отношения к тому, используете ли вы Core Data. В результате части вашего кода, касающиеся выполнения запросов на выборку, бесполезны, если только у вас нет другого кода, сохраняющего в Core Data, о котором вы не упомянули. Вы ничего не поместили в Core Data, поэтому извлекать нечего.

У меня также есть версия эскиза в файле ресурсов моего приложения, который, как вы видите, содержит каталог Abies fraseri.

Мы на самом деле не можем. Этот снимок экрана показывает, что он присутствует в проекте Xcode. Это не обязательно означает, что он включен в приложение при его создании. В проекте могут быть файлы, не являющиеся частью сборки. Для этого есть разные причины, в том числе проекты с несколькими целями, которые не включают все одинаковые файлы (например, приложение и расширение приложения).

Но также возможно случайно оставить файлы вне цели, и это вероятная причина вашей проблемы. Выберите нужные изображения и откройте инспектор файлов Xcode в правой части окна. Загляните в раздел «целевое членство» и убедитесь, что рядом с целевым приложением стоит галочка.

Другая возможность — менее вероятная, но не невозможная — заключается в том, что вы просто ищете не в том месте. Xcode поддерживает множество различных симуляторов, каждый из которых независим от других. Возможно, вы создаете для одного симулятора, но проверяете путь к файлу для другого. Например, возможно, вы создаете симулятор для iPhone 7, но ищете пути к файлам для симулятора iPhone SE. Файлы не являются общими, поэтому обновление одного не влияет на другие.

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

person Tom Harrington    schedule 14.07.2017