У меня есть Realm
объекта:Как изменить значение атрибута Realm одноплодной
class TransactionDB: Object {
dynamic var transactionID : Int = -1
dynamic var registrationPlate : String = ""
dynamic var locationID : Int = 0
dynamic var time : String = ""
dynamic var subscription : String = ""
dynamic var startTime : NSDate = NSDate()
dynamic var endTime : NSDate = NSDate()
dynamic var status : Int = -2
dynamic var requestType : Int = -1
var extensions : List<ExtensionDB> = List<ExtensionDB>()
dynamic var price : Double = 0
dynamic var currency : String = ""
private dynamic var test : Int = 10
override static func primaryKey() -> String? {
return "transactionID"
}
class var sharedInstance : TransactionDB {
struct Singleton {
static let instance = TransactionDB()
}
return Singleton.instance
}
static func saveOrUpdate {
// ......
}
и одноплодная версия для него. Таким образом, у меня есть один объект над многими контроллерами, когда экраны меняются. Несколько дней назад я использовал некоторую более старую версию Objective-C Realm, но теперь я перешел на версию Swift 1.0.2, и я пытаюсь исправить все проблемы.
Так что теперь он пришел к части, что, когда я пытаюсь вызвать такие вещи, как:
TransactionDB.sharedInstance.time = ""
я получаю исключение. Однако, после того, как я делаю следующее, это работает:
let realm = try! Realm()
try! realm.write {
TransactionDB.sharedInstance.time = ""
}
Так я создаю одноэлементных неправильно или это именно так, как это должно быть сделано? Потому что для меня это немного раздражает, что мне всегда нужно использовать блок try
, когда я хочу изменить значение некоторого атрибута.
Я просто подумал, что он может работать без него, потому что я не хочу, чтобы он записывался в БД до тех пор, пока он не закончится. Я уже понял, что мне, вероятно, придется создать temp-класс, чтобы иметь такой объект. – schmru
До конца? Логика, которая подготавливает значения, которые необходимо обновить? Просто сохраняйте всю свою логику вне/до блока транзакции и выполняйте только блок транзакций с использованием переменных всех готовых, как только вы будете готовы. Не смешивайте логику приложения с блоком транзакций. Сделайте как можно меньше внутри блока транзакций. – solidcell
Это то, что я делал, у меня был общий экземпляр объекта, который никогда не записывался в БД, чтобы я мог менять вещи, и когда все было установлено, я создал новый объект с этими значениями и сохранил его. Но как-то, как только я установил общие атрибуты, я не смог бы их изменить без блока транзакций. – schmru