#ios #swift #xcode #core-data #nsmanagedobject
#iOS #swift #xcode #core-data #nsmanagedobject
Вопрос:
Я получаю некоторый ответ сервера, и он имеет следующий формат.
{
"sample_id": "Sample 1",
"token": 2,
"data": [
{
"id": "2",
"date": "Oct 20 2019"
},
{
"id": "3",
"date": "Oct 08, 2019"
}
]
}
и для этого я создал объект и объявил атрибут как преобразуемый тип.
static func fetchInfo() -> [Info] {
// Create Fetch Request
let managedContext = someMethod.getContext()
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Entity")
var result = [Info]()
do {
// Execute Fetch Request
let records = try managedContext.fetch(fetchRequest)
if let records = records as? [Info] {
result = records
}
}catch {
print("Unable to fetch managed objects for entity (String(describing: entity)).")
}
return result
}
Но в приведенном выше методе он не входит в записи, а данные не присваиваются модельному (декодируемому) классу.
И мой декодируемый класс
struct Info: Decodable {
let sampleId: String?
let token: Int?
let data: [Data]?
enum CodingKeys: String, CodingKey {
case sampleId = "sample_id"
case token = "surveys_taken"
case data = "data"
}
}
struct Data: Decodable {
let id: String?
let date: String?
enum CodingKeys: String, CodingKey {
case id = “id”
case date = “date”
}
}
Есть предложения?
Комментарии:
1. Не называйте пользовательские типы так же, как встроенные типы для начала, поэтому переименуйте данные во что-то другое. И вы не можете просто привести подкласс NSManagedObject к вашей информации о структуре, вам нужен некоторый код для сопоставления между ними. Может быть, вы можете добавить код, в котором вы сохраняете информацию в своем хранилище
2. Я только что привел пример для имени объекта в соответствии с конфиденциальностью
Ответ №1:
попробуйте протестировать так
let fetchRequest: NSFetchRequest<Info> = Info.fetchRequest()
fetchRequest.predicate = NSPredicate(format: "self == %@", self.objectID)
do {
let result = try context.fetch(fetchRequest)
if let info = result.first {
return info
}
} catch {
print("Failed to fetch Info: (error)", module: coreDataLogModule)
}
return self
Комментарии:
1. Что такое INOLogError? И Info — это структура, а не подкласс NSManagedObject
2. @developer нет атрибута objectiid, у меня есть один атрибут, который является преобразуемым типом
3. @AnilkumariOS-Реактивный Да, есть, если self в данном случае является NSManagedObject, но этот ответ, похоже, вырван из контекста, поэтому его трудно понять.
4. Итак, как преобразовать NSManagedObject в класс модели, есть предложения?
5. @AnilkumariOS-ReactNative Мы не знаем, что конвертировать, поскольку мы не знаем, что / как вы храните в своей сущности.