import Foundation
import SwiftData
/// Represents one product scan in the user’s history.
@Model
final class Scan: Identifiable {
// MARK: - Persisted properties
@Attribute(.unique) var id: UUID = UUID()
var productName: String?
var brand: String?
var scannedAt: Date
var imagePath: String
var gpt: ChatGPTResponse // strongly-typed API payload
// MARK: - Init
init(productName: String? = nil,
brand: String? = nil,
scannedAt: Date = .now, imagePath: String,
gpt: ChatGPTResponse) {
self.productName = productName
self.brand = brand
self.scannedAt = scannedAt
self.imagePath = imagePath
self.gpt = gpt
}
}
// MARK: - Typed response models (Codable)
struct ChatGPTResponse: Codable {
let productCategory: String
let primaryBenefit: String
let ingredients: [Ingredient]
let overallVerdict: OverallVerdict
let effectiveness: EffectivenessScores
enum CodingKeys: String, CodingKey {
case productCategory = "product_category"
case primaryBenefit = "primary_benefit"
case ingredients
case overallVerdict = "overall_verdict"
case effectiveness = "effectiveness_scores"
}
}
struct Ingredient: Codable {
let name: String
let plainExplanation: String
enum CodingKeys: String, CodingKey {
case name
case plainExplanation = "plain_explanation"
}
}
struct OverallVerdict: Codable {
let summary: String
}
struct EffectivenessScores: Codable {
let coreBenefitStrength: Int
let supportingIngredientsSynergy: Int
let absorptionAndDelivery: Int
let durationOfEffect: Int
enum CodingKeys: String, CodingKey {
case coreBenefitStrength = "core_benefit_strength"
case supportingIngredientsSynergy = "supporting_ingredients_synergy"
case absorptionAndDelivery = "absorption_and_delivery"
case durationOfEffect = "duration_of_effect"
}
}
< /code>
всякий раз, когда я вставляю новый объект Scan через modelcontext.insert (), я сталкиваюсь с этой ошибкой: < /p>
CoreData: error: Row (pk = #) for entity 'Scan' is missing mandatory text data for property 'productCategory'
< /code>
После проверки файла по умолчанию.0|Z_PK|INTEGER|0||1
1|Z_ENT|INTEGER|0||0
2|Z_OPT|INTEGER|0||0
3|ZCOREBENEFITSTRENGTH|INTEGER|0||0
4|ZSUPPORTINGINGREDIENTSSYNERGY|INTEGER|0||0
5|ZABSORPTIONANDDELIVERY|INTEGER|0||0
6|ZDURATIONOFEFFECT|INTEGER|0||0
7|ZSCANNEDAT|TIMESTAMP|0||0
8|ZBRAND|VARCHAR|0||0
9|ZPRODUCTCATEGORY|VARCHAR|0||0
10|ZPRIMARYBENEFIT|VARCHAR|0||0
11|ZSUMMARY|VARCHAR|0||0
12|ZIMAGEPATH|VARCHAR|0||0
13|ZPRODUCTNAME|VARCHAR|0||0
14|ZID|BLOB|0||0
15|ZINGREDIENTS|BLOB|0||0
Почему свойства в таблице SQLite в Default.store Не соответствуют свойствам моего класса сканирования?
Я пытаюсь вставить модель в хранилище устройства с помощью SwiftData. Вот моя модель данных: < /p> [code]import Foundation import SwiftData
/// Represents one product scan in the user’s history. @Model final class Scan: Identifiable {
// MARK: - Persisted properties @Attribute(.unique) var id: UUID = UUID() var productName: String? var brand: String? var scannedAt: Date var imagePath: String var gpt: ChatGPTResponse // strongly-typed API payload
struct ChatGPTResponse: Codable { let productCategory: String let primaryBenefit: String let ingredients: [Ingredient] let overallVerdict: OverallVerdict let effectiveness: EffectivenessScores
enum CodingKeys: String, CodingKey { case productCategory = "product_category" case primaryBenefit = "primary_benefit" case ingredients case overallVerdict = "overall_verdict" case effectiveness = "effectiveness_scores" } }
struct Ingredient: Codable { let name: String let plainExplanation: String
enum CodingKeys: String, CodingKey { case name case plainExplanation = "plain_explanation" } }
struct OverallVerdict: Codable { let summary: String }
struct EffectivenessScores: Codable { let coreBenefitStrength: Int let supportingIngredientsSynergy: Int let absorptionAndDelivery: Int let durationOfEffect: Int
enum CodingKeys: String, CodingKey { case coreBenefitStrength = "core_benefit_strength" case supportingIngredientsSynergy = "supporting_ingredients_synergy" case absorptionAndDelivery = "absorption_and_delivery" case durationOfEffect = "duration_of_effect" } }
< /code> всякий раз, когда я вставляю новый объект Scan через modelcontext.insert (), я сталкиваюсь с этой ошибкой: < /p> CoreData: error: Row (pk = #) for entity 'Scan' is missing mandatory text data for property 'productCategory' < /code> После проверки файла по умолчанию.0|Z_PK|INTEGER|0||1 1|Z_ENT|INTEGER|0||0 2|Z_OPT|INTEGER|0||0 3|ZCOREBENEFITSTRENGTH|INTEGER|0||0 4|ZSUPPORTINGINGREDIENTSSYNERGY|INTEGER|0||0 5|ZABSORPTIONANDDELIVERY|INTEGER|0||0 6|ZDURATIONOFEFFECT|INTEGER|0||0 7|ZSCANNEDAT|TIMESTAMP|0||0 8|ZBRAND|VARCHAR|0||0 9|ZPRODUCTCATEGORY|VARCHAR|0||0 10|ZPRIMARYBENEFIT|VARCHAR|0||0 11|ZSUMMARY|VARCHAR|0||0 12|ZIMAGEPATH|VARCHAR|0||0 13|ZPRODUCTNAME|VARCHAR|0||0 14|ZID|BLOB|0||0 15|ZINGREDIENTS|BLOB|0||0 [/code] Почему свойства в таблице SQLite в Default.store Не соответствуют свойствам моего класса сканирования?