2016-05-19 3 views
2

Мой вопрос прост: есть ли способ для экземпляра объекта, который будет уведомлен, когда он собирается удалить?База данных Realm - уведомление при удалении объекта

У меня есть случай, когда у меня есть свойство, являющееся дорогой к изображению, хранящемуся на диске. Я хотел бы удалить это изображение всякий раз, когда объект realm этого типа будет удален.

+0

I хотя Realm имеет эту функцию 'addNotificationBlock (block: (RealmCollectionChange -> Void)) -> NotificationToken'. Вы можете отслеживать удаленные идентификаторы в объекте RealmCollectionChange –

ответ

1

Если вы предпочитаете не использовать KVO, вы можете использовать Realm's Object Notifications.

Краткий пример будет:

var token: NotificationToken? 
token = yourRealmObject.addNotificationBlock { change in 
    switch change { 
    case .change(let properties): 
     print("Object has changed") 
    case .error(let error): 
     print("An error occurred: \(error)") 
    case .deleted: 
     print("The object was deleted.") 
    } 
} 

просто убедитесь, чтобы сохранить сильную ссылку на объект-маркер, так как ваш блок уведомления будет автоматически отписался по Realm, как только он будет выпущен.

2

Вы можете использовать КВО наблюдать invalidated свойство:

// a global context object to identify our observations 
let myContext = UnsafePointer<()>() 

class MyClass { 
    func stuff() { 
     object.addObserver(self, forKeyPath: "invalidated", options: [.Prior], context: myContext) 
    } 

    override func observeValueForKeyPath(keyPath: String!, ofObject object: AnyObject!, change: [NSObject : AnyObject]!, context: UnsafePointer<()>) { 
     if context == myContext && keyPath == "invalidated" { 
      print("\(object) is about to be deleted") 
      object.removeObserver(self, forKeyPath: "invalidated", context: myContext) 
     } 
     else { 
      super.observeValueForKeyPath(keyPath, ofObject: object, change: change, context: context) 
     } 
    } 
} 

Вы можете использовать что-то вроде PMKVObserver или KVOController, чтобы упростить это, как использование КВО непосредственно может быть неприятным.

Смежные вопросы