У меня есть предварительное приложение Swift, использующее Realm. У него есть класс с именем Product
с первичным ключом, установленным как «upc». Я изменил класс, добавив некоторые дополнительные переменные, а затем попытался запустить миграцию. Теперь, когда я пытаюсь запустить приложение, я получаю следующую ошибку:
Fatal error: 'try!' expression unexpectedly raised an error: Error Domain=io.realm Code=1 "Primary key property 'Product.upc' has duplicate values after migration."
Я понимаю, что у меня не может быть повторяющихся значений ключей, но неясно, как мне обойти это, не изменяя значения upc на какое-то новое значение, которое неприемлемо. Есть ли другой способ просто перенести, сбросить или удалить схему, чтобы обойти это?
Я попытался удалить файл области и начать все сначала, но я что-то упускаю, так как это просто повторяется после того, как я снова запускаю все это.
Product
класс:
@objc dynamic var upc: Int = 0
@objc dynamic var itemDescription: String = ""
@objc dynamic var originalQty: Int = 0
//@objc dynamic var totalOriginalCost: String
//@objc dynamic var totalOriginalRetail: String
//@objc dynamic var vendorStyle: String
@objc dynamic var color: String = ""
@objc dynamic var size: String = ""
//@objc dynamic var clientCost: String
//@objc dynamic var totalClientCost: String
//@objc dynamic var division: String
//@objc dynamic var departmentName: String
//@objc dynamic var vendorName: String
@objc dynamic var image: String = ""
@objc dynamic var imageSlot1: String = ""
@objc dynamic var imageSlot2: String = ""
@objc dynamic var imageSlot3: String = ""
@objc dynamic var imageSlot4: String = ""
@objc dynamic var imageSlot5: String = ""
@objc dynamic var imageSlot6: String = ""
@objc dynamic var imageSlot7: String = ""
@objc dynamic var imageSlot8: String = ""
@objc dynamic var imageSlot9: String = ""
@objc dynamic var imageSlot10: String = ""
@objc dynamic var imageSlot11: String = ""
@objc dynamic var imageSlot12: String = ""
@objc dynamic var imageSlot13: String = ""
@objc dynamic var imageSlot14: String = ""
@objc dynamic var imageSlot15: String = ""
@objc dynamic var price: Double = 0
@objc dynamic var shipping: Double = 0
@objc dynamic var brand: String = ""
@objc dynamic var style: String = ""
@objc dynamic var sleeveStyle: String = ""
@objc dynamic var sleeveLength: String = ""
override static func primaryKey() -> String? {
return "upc"
}
}
migration
код:
// bump the schema version to 1
schemaVersion: 1,
migrationBlock: { migration, oldSchemaVersion in
migration.enumerateObjects(ofType: Product.className()) { oldObject, newObject in
if (oldSchemaVersion < 1) {
}
}
})
Fatal error: 'try!' expression unexpectedly raised an error: Error Domain=io.realm Code=1 "Primary key property 'Product.upc' has duplicate values after migration."
Обновление: я попробовал следующий код для сброса схемы, но потом получаю новые ошибки:
var config = Realm.Configuration() config.deleteRealmIfMigrationNeeded = true
error: Fatal error: 'try!' expression unexpectedly raised an error: Error Domain=io.realm Code=10 "Migration is required due to the following errors: - Property 'Product.upc' has been made required. - Property 'Product.itemDescription' has been made required. - Property 'Product.originalQty' has been made required. - Property 'Product.color' has been made required. - Property 'Product.size' has been made required. - Property 'Product.image' has been made required. - Property 'Product.imageSlot1' has been made required. - Property 'Product.imageSlot2' has been made required. - Property 'Product.imageSlot3' has been made required. - Property 'Product.imageSlot10' has been added. - Property 'Product.imageSlot5' has been added. - Property 'Product.imageSlot6' has been made required. - Property 'Product.imageSlot7' has been made required. - Property 'Product.imageSlot8' has been made required. - Property 'Product.imageSlot9' has been made required. - Property 'Product.imageSlot4' has been added. - Property 'Product.imageSlot11' has been made required. - Property 'Product.imageSlot12' has been made required. - Property 'Product.imageSlot13' has been made required. - Property 'Product.imageSlot14' has been made required. - Property 'Product.imageSlot15' has been made required. - Property 'Product.price' has been made required. - Property 'Product.shipping' has been made required. - Property 'Product.brand' has been made required. - Property 'Product.style' has been made required. - Property 'Product.sleeveStyle' has been made required. - Property 'Product.sleeveLength' has been made required.