Xcode сохраняет относительный путь к CoreData и делает полный путь при чтении

У меня следующая проблема:

У меня есть сущности, скажем, человек. Для каждого человека можно сделать по одной фотографии. Я сохраняю этот путь этой фотографии в атрибуте человека.

Каждый раз, когда я открываю человека, я получаю путь к фотографии, загружаю ее в UIImage, и все в порядке.

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

Есть ли способ предотвратить изменение идентификатора?

OR

Как я могу сохранить фотографию с относительными путями? Идея: я сохраняю относительный путь к coredata и при чтении совмещаю его с app-path.


person Philipp Schaller    schedule 22.11.2013    source источник
comment
Этот вопрос не ясен. С чего вы взяли, что обновление приложения изменит идентификатор. И если вы используете правильные методы NSFileManager, как и предполагалось, вы все равно будете использовать песочницу приложения.   -  person Abizern    schedule 22.11.2013


Ответы (2)


Сохраните путь к фотографии как путь относительно каталога документов приложения. Например, что-то вроде "photos/filename.png".

При извлечении фотографий сначала получите путь к каталогу документов, а затем добавьте к имени пути urlByAppendingPathComponent:.

Конечно, как и в случае с любым приложением, когда вы делаете что-либо для создания нового каталога приложения, например.

  • изменение подписи приложения
  • другое устройство
  • другой симулятор,
  • другой компьютер разработки,
  • и т.п.

и ваше основное хранилище данных, и каталог документов будут пустыми.

Вы можете предварительно заполнить основные данные и папку документов данными, которые вы храните в пакете (вы копируете их в папку документов при первом запуске). Но это будут единственные данные, которые у вас будут доступны, когда любое из вышеуказанных условий создаст новый экземпляр вашего приложения.

Если вы хотите обмениваться состояниями хранилища данных между устройствами, возможно, вы захотите рассмотреть iCloud. Однако iCloud не будет слишком хорошо работать с большими медиафайлами, такими как фотографии, и есть также известные и все же нерешенные проблемы с iCloud и Core Data.

person Mundi    schedule 22.11.2013

Сохраните путь к файлу в NSURL. Затем вы можете постоянно сохранять данные закладок в основных данных и извлекать их позже.

- (NSData*)bookmarkForURL:(NSURL*)url {
    NSError* theError = nil;
    NSData* bookmark = [url bookmarkDataWithOptions:NSURLBookmarkCreationSuitableForBookmarkFile
                                            includingResourceValuesForKeys:nil
                                            relativeToURL:nil
                                            error:&theError];
    if (theError || (bookmark == nil)) {
        // Handle any errors.
        return nil;
    }
    return bookmark;
}

- (NSURL*)urlForBookmark:(NSData*)bookmark {
    BOOL bookmarkIsStale = NO;
    NSError* theError = nil;
    NSURL* bookmarkURL = [NSURL URLByResolvingBookmarkData:bookmark
                                            options:NSURLBookmarkResolutionWithoutUI
                                            relativeToURL:nil
                                            bookmarkDataIsStale:&bookmarkIsStale
                                            error:&theError];

    if (bookmarkIsStale || (theError != nil)) {
        // Handle any errors
        return nil;
    }
    return bookmarkURL;
}

https://developer.apple.com/library/content/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/AccessingFilesandDirectories/AccessingFilesandDirectories.html#//apple_ref/doc/uid/TP40010672-CH3-SW10

person John K    schedule 23.04.2017