Для того, чтобы избежать будучи проблемой XY, вот некоторые фон:Как хранить NSManagedObjectID постоянно?
Мое приложение позволяет пользователям создавать и сохранять множество настроек вроде как Xcode в шрифты и цвета Chooser:
Это происходит потому, что есть много вещей, которые пользователи могут установить. Было бы проще просто нажать на сохраненную настройку вместо того, чтобы снова установить все эти вещи.
Я использовал основные данные для сохранения настроек, сохраненных пользователем. Каждый параметр, созданный пользователем, является экземпляром подкласса NSManagedObject
. И теперь мне нужно сохранить выбранную настройку настойчиво, чтобы пользователь имел тот же параметр, который был выбран ранее, когда приложение снова открывается.
Моя первая мысль состояла в том, чтобы хранить NSManagedObject
экземпляр подкласса в NSUserDefaults
. Но согласно документации, я не могу сохранить его, если я не преобразовать его в NSData
:
по умолчанию должен быть список свойств, то есть экземпляр (или для коллекций комбинации экземпляров) : NSData, NSString, NSNumber, NSDate, NSArray или NSDictionary.
Затем я попытался хранения objectID
экземпляра NSManagedObject
подкласса. Я вижу, что существует метод URIRepresentation()
, который возвращает NSURL
. Поэтому я думал, что это сработает:
NSData(contentsOfURL: selectedOption!.objectID.URIRepresentation())
Но инициализатор каким-то образом сработал.
Теперь я понимаю, что это глупая идея, потому что, даже если я могу преобразовать ее в NSData
, я не могу преобразовать NSData
в NSManagedObjectID
!
Согласно this question, ОП, кажется, чтобы иметь возможность хранить идентификатор объекта:
Я сохранить выбранную тему ObjectId в NSUserDefaults так, что, когда приложение перезапускается, выбранная тема еще будет неповрежденным.
Как я могу это сделать?
Вы можете просто сохранить строковое значение URIRпредставления в NSUserDefaults. Позже вы можете загрузить эту строку, затем использовать 'managedObjectIDForURIRepresentation', чтобы получить NSObjectId, а затем' objectWithID', чтобы получить NSManagedObject – Paulw11
@ Paulw11, то как я могу преобразовать строку в соответствующий NSManagedObject? – Sweeper
Как я уже сказал, указав URL-адрес 'managedObjectIDForURIRпредставляя' и предоставив объект, который мне был бы возвращен' objectWithID' В контексте управляемого объекта – Paulw11