siz olduğunuz sürece Nesnenizin sığ bir kopyasını oluşturmak için aşağıdakileri kullanabilirsiniz geliştirilmeye ihtiyacı var. Nesne sınıfında bir uzantı oluşturdum ve bu nesne bir nesneyi objOut
alır ve kendiliğinden bakarak düz özellikleri doldurur. Düz olmayan bir özellik bulunduğunda (bir iç içe geçmiş nesne) atlanır. Benim Realms için Yöneticisi sınıfının içinde
// Duplicate object with its flat properties
func duplicate(objOut: Object) -> Object {
// Mirror object type
let objectType: Mirror = Mirror(reflecting: self);
// Iterate on object properties
for child in objectType.children {
// Get label
let label = child.label!
// Handler for flat properties, skip complex objects
switch String(describing: type(of: child.value)) {
case "Double", "Int", "Int64", "String":
objOut.setValue(self.value(forKey: label)!, forKey: label)
break
default:
break
}
}
return objOut
}
Ben nesnelerin benim kopyalarını oluşturmak için kullandığınız yöntem
copyFromRealm()
var.
// Creates copy out of realm
func copyFromRealm() -> Appointment {
// Duplicate base object properties
let cpAppointment = self.duplicate(objOut: Appointment()) as! Appointment
// Duplicate UIU object
cpAppointment.uiu = self.uiu?.duplicate(objOut: UpdateInfo()) as? UpdateInfo
// Duplicate AddressLocation object
let cpAddress = self.addressLocation?.address?.duplicate(objOut: Address()) as? Address
let cpCoordinates = self.addressLocation?.coordinates?.duplicate(objOut: Coordinates()) as? Coordinates
cpAppointment.addressLocation = self.addressLocation?.duplicate(objOut: AddressLocation()) as? AddressLocation
cpAppointment.addressLocation?.address = cpAddress
cpAppointment.addressLocation?.coordinates = cpCoordinates
// Duplicate each ExtraInfo
for other in self.others {
cpAppointment.others.append(other.duplicate(objOut: ExtraInfo()) as! ExtraInfo)
}
return cpAppointment
}
ı bulmak mümkün değildi:
Appointment object
- flat properties
- one UpdateInfo object
- flat properties
- one AddressLocation object
- flat properties
- one Address object
- flat properties
- one Coordinates object
- flat properies
- a list of ExtraInfo
- each ExtraInfo object
- flat properties
Bu benim copyFromRealm() yöntemini uyguladık nasıl: bu benim Atama sınıfının yapıdır size pratik bir örnek vermek gerekirse duplicate() yöntemimin içinde iç içe geçmiş nesnelerle çalışmak için iyi ve makul bir yol. Özyinelemeyi düşündüm ama kod karmaşıklığı çok arttı.
Bu en uygun değil, ancak iç içe geçmiş nesneyi yönetmenin bir yolunu bulursam, bu yanıtı güncellerim.
Benim durumumda birincil anahtar var, o zaman github için bir özellik isteği dosyalayacağım. – mvo
Fikir: Bir nesneyi (ve onun ilişkilerini) bir Realm'den ayırmanın ve ardından birincil anahtarların nesnede (ve onun ilişkilerinin) yerini almanın ve sonra yeniden eklemenin bir yolu var mı? – mvo
Şu an bu yerleşik alanı almanın hiçbir yolu yoktur, ancak el ile yinelemeli bir kopya yapabilirsiniz. Bana gönderdiğiniz konuyla bağlantı kurduğunuzdan emin olun! – segiddins