fix: add obj existence check before removeObj(), because custom event may cause loop