TL; DR: есть ли способ программно читать / вызывать (НЕ записывать!) Экземпляр сущности Core Data, используя «серийный номер» с p-номером, который привязан к x-coredata экземпляра: // идентификатор? Это хорошая / плохая идея?
Я использую метод, подобный следующему, для извлечения экземпляров сущности, вызванной из хранилища основных данных:
var managedContext: NSManagedObjectContext!
let fetchRequest : NSFetchRequest<TrackInfo> = TrackInfo.fetchRequest()
fetchResults = try! managedContext.fetch(fetchRequest)
for (i, _) in Global.Vars.numberOfTrackButtons! {
let workingTrackInfo = fetchResults.randomElement()!
print("current track is: \(workingTrackInfo)")
Список треков возвращается в fetchResults в виде массива, и я могу выбрать один из них случайным образом (fetchResults.randomElement()
). Оттуда я могу изучить детали этого одного элемента, приведя его к строке и отобразив его в консоли (оператор print
). Я не перечисляю код ниже, но, используя workingTrackInfo
, я могу видеть этот экземпляр, читать его свойства в других переменных и т. Д.
В консоли iOS / Xcode перечисляет выбранный элемент следующим образом:
current track is: <MyProjectName.TrackInfo: 0x60000374c2d0> (entity:
TrackInfo; id: 0xa7dc809ab862d89d
<x-coredata://2B5DDCDB-0F2C-4CDF-A7B9-D4C43785FDE7/TrackInfo/p22>;
data: <fault>)
Строка, начинающаяся с x-coredata:
, привлекла мое внимание. Он отформатирован как URL-адрес, состоящий из того, что, как я полагаю, является UUID для конкретного хранилища базовых данных, связанного с текущей сборкой приложения (т. Е. Не является стабильным адресом, который вы могли бы жестко закодировать; вам нужно программно искать базовые данные хранить, аналогично функциям, которые мы используем для программного поиска папки документов, пакета приложений и т. д.) Третий элемент - это имя объекта в моей модели базовых данных - достаточно просто.
Но этот последний номер - то, что мне интересно. Из проверки базы данных SQLite, связанной с этим хранилищем данных, она выглядит как «серийный номер экземпляра», связанный с полем Z_PK в модели данных.
Я Я НЕ заинтересован в попытке обойти обычные механизмы Core Data для изменения содержимого управляемого объекта. Яблоко очень ясно о том, что это плохая идея.
Что Я ЕСМЬ интересует, так это то, можно ли адресовать конкретный экземпляр Базовых данных, используя этот "серийный номер". **
В моем приложении, где я случайным образом выбираю один трек из сотен или даже тысяч треков, мне было бы интересно, среди прочего, возможность выбрать один трек на основе этого p-number
serial, где я просто запрашиваю отдельный экземпляр, генерируя случайный p-number
, прикрепляя его к выражению x-coredata: //, отформатированному так, как указано выше, и загружая результат (только для чтения) основе!) в переменную для дальнейшего использования в другом месте приложения.
В целях тестирования я попытался просто жестко кодировать x-coredata://2B5DDCDB-0F2C-4CDF-A7B9-D4C43785FDE7/TrackInfo/p22
в качестве URL-адреса, но XCode, похоже, не нравится. Есть ли какой-либо другой тип данных (например, NSManagedObject?), Который позволяет вам установить x-coredata: // "URL" в качестве его содержимого?
ВОПРОСЫ: Кто-нибудь делал что-нибудь подобное; есть ли какие-то соображения по поводу памяти / потоков, почему захват имен экземпляров таким способом является плохой идеей (я нуб из iOS / Core Data, так что я не знаю, чего не знаю; пожалуйста, позабавьте меня!); какой будет синтаксис / метод для этих типов операторов?
Спасибо!