Как загружать и хранить файлы в Cocoa с помощью Core Data?

У меня есть приложение, к которому я хотел бы иметь возможность загружать файлы. Я мог представить себе сериализацию данных, помещая их в массив, затем сериализуя массив и помещая его в Core Data, но это не совсем правильно. Я мог бы также представить себе копирование файлов в поддерживающие файлы приложения, получение NSURL для этих объектов и сохранение массива или NSURL.

В любом случае NSURL не является атрибутом, а также NSArray в Core Data.

Еще одна потенциальная проблема – моя цель – сделать приложение для iPhone и настольных приложений, которые синхронизируются вместе. Поэтому я хочу загружать изображения с моего iPhone или загружать файлы с рабочего стола, и все работает нормально. Я не уверен, что копирование файлов будет совместимо с iPhone. Я хочу также загрузить любой файл.

ВОПРОС:
Как хранить изображения на iOS?
Как хранить файлы в Mac OS X?
Я храню двоичные данные в основных данных? Копировать файлы в каталог и хранить NSURL?

ВОПРОС БОНУСА:
Как синхронизировать между приложениями iOD и Mac OS X?

ПОЯСНЕНИЯ:
Извините за любую путаницу из этого вопроса. Вот более чистая версия:

Моя основная модель данных состоит из объекта «Entry», который имеет атрибут NSString и отношения «один ко многим» с объектом «Файл». Этот файловый объект имеет имя атрибут NSString и второй атрибут, который еще не определен. Этот второй атрибут может быть (из того, что я могу придумать) трансформируемым представлением NSData некоторого файла, трансформируемым представлением NSURL, которое указывает на некоторый файл (я все еще не совместим с тем, как работает преобразование, поэтому я мог ошибаться обо всем этом …) или двоичный блок данных файла. Могут быть и другие варианты, но дело в том, чтобы сохранить или загрузить файлы в эту программу из OS X или iOS и синхронизировать базы данных вместе.

У меня есть приложение OS X с табличным представлением, в котором отображаются имена всех записей. Выберите имя записи, и у вас будет список файлов, на которые он указывает. Дважды щелкните файл, и он должен открыть приложение по умолчанию так же, как и с Finder. Вы также должны иметь возможность экспортировать файлы из Core Data и сохранять их обратно в каталог за пределами приложения.

У меня также есть приложение iOS, которое позволяет мне делать снимок или несколько изображений, сохранять их в «Файловые» объекты, указывать на эти файлы из объекта «Запись» (используя ту же модель Core Data, что и приложение OS X), и offine sync с моим OS X Application, поэтому оба приложения имеют одинаковые данные.

Надеюсь, это прояснит ситуацию.

Спасибо за помощь,

Chet

3 Solutions collect form web for “Как загружать и хранить файлы в Cocoa с помощью Core Data?”

Я считаю, что вы еще не очень хорошо знакомы с Core Data. Я настоятельно рекомендую погрузиться в документацию Core Data.

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

У вашего пользователя будут объекты NSSet для файлов, каждый объект File будет отвечать за сохранение имени и его URL-адреса в каталоге Application Documents.

Что касается вашей второй проблемы, я не совсем понимаю вопрос.

Надеюсь, это поможет, Cheers!

Core Data позволяет вам установить опцию для внешнего хранения атрибутов, а затем IT решит, хранить ли этот объект во внешнем файле.

Таким образом, вы должны создать атрибут, называемый fileData (binary) а в вашем подклассе использовать NSData а затем просто установить file.fileData = yourFileData и Core Data решат, где его хранить.

Не нужно отслеживать URL самостоятельно. Не забудьте сохранить какой-то идентификатор (имя файла), чтобы вы могли получить нужный файл.

РЕДАКТИРОВАТЬ

BTW, если вы просто хотите сохранить образ атрибутивной строки, тогда лучше использовать трансформируемый атрибут. Transformable полезен, если вы хотите автоматическое преобразование в NSImage, UIImage или NSAttributedString (или какой-либо другой архивируемый объект).

установите такой файл

 NSData * data = [NSData dataWithContentsOfURL:...]; file.fileData = data; 

Чтобы записать данные в файл, используйте

 bool result = [file.fileData writeToURL:atomically:]; 

Чтобы синхронизировать основные данные между устройствами, я бы посоветовал вам взглянуть на этот сайт, где я разместил информацию об интеграции Core Data и iCloud для приложений iOS и OS X. Это выходит за рамки ответа на этом сайте.

http://ossh.com.au/design-and-technology/software-development/

  • Основные данные не могли полностью выполнить ошибку для объекта после получения данных PermanantID
  • Использование мантии с основными данными - NSSet и NSArray
  • Почему Core Data занимает столько времени, чтобы сохранить объект?
  • Производительность CoreData: предикат для отношений большего числа ко многим
  • Быстрое и CoreData / хранение данных
  • Xcode изменяет текущую версию модели CoreData при каждом запуске
  • Почему очевидно, что не хранить пароль в NSUserDefaults?
  • Пользовательская политика в моей модели xcmapping не будет выполнена
  • автоматически созданный подкласс NSManagedObject для логического атрибута вызывает предупреждение
  • Какой метод сохранения MagicalRecord
  • Создавать временные объекты CoreData (в непостоянном контексте MagicalRecord)?
  • проверить объект coredata на nil
  • Interesting Posts

    Просмотр уведомлений о ротации: почему didRotateFromInterfaceOrientation: вызов не вызван?

    Доступ к хранилищу таблиц Azure от Swift

    «Недопустимый путь к изображению », хотя CFBundleIcons отсутствует в файле .plist

    Firebase загружает файл, получая дополнительную строку в имени файла

    Не удалось найти причину сбоя –

    Swift 3 и lldb: Рамка печати UIView, заданная шестнадцатеричный адрес

    Как удалить эффекты перехода UIViewWithView

    Насколько случайным является arc4random (mac os x)? (или что я делаю неправильно?)

    В Swift, как вы обнаруживаете, какие действия UIControlEvents инициировали действие?

    xCode 8, swift 3, Facebook SDK login, используя LoginManager, нужно дважды щелкнуть, чтобы открыть форму входа в FB

    Выбор не тип, который можно переименовать Xcode 7

    Почему я не могу изменить размер фрейма представления в Swift?

    iOS Airplay – «Игра на вашем телевизоре»

    CFStream отключается после настройки SOCKS proxy config

    IOS поддерживает соединение asio от сети ipv6

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.