2016-06-13 6 views
0

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

home screen

Я получаю Invalid arguments исключение при попытке удалить объект пользователя из памяти царств в onRightButtonPress случае. Вот код для этого события в NavigatorIOS.

<NavigatorIOS 
    barTintColor="#000000" 
    tintColor="#fff" 
    titleTextColor="#fff" 
    ref={(ref) => this._navigator = ref} 
    style={{flex: 1,backgroundColor: '#fff'}} 
    initialRoute={{ 
     title: 'NOOZOO', 
     component: Home, 
     leftButtonIcon: require('../images/menu.png'), 
     onLeftButtonPress:() => { this._drawer.open() }, 
     rightButtonTitle: 'Logout', 
     onRightButtonPress:() => {alert('Logout'); 
            console.log({name: global.__user.name,token: global.__user.token}); 
            var users = realm.objects('User'); 
            console.log(users.length); 
            console.log(users[0].isValid()); 
            realm.write(()=>{ 
            realm.delete('User', users[0]); 
            }); 
            console.log('deleted'); 
            this._navigate({'title':'Company','routeName':'Home','active':false,'iconUrl': require('../images/check.png'),'newView':false}); 

            console.log(users); 
            }, 
    }}/> 

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

Console output when Logout is pressed

Я не знаю, если я делаю что-то неправильно с помощью метода царства вызова или что-то. Я видел документы для области, а также читал об этом проблему на github, но не смог решить эту проблему. Любая помощь будет оценена по достоинству.

ответ

1

Вызов do delete не принимает тип объекта в качестве первого аргумента. Попробуйте изменить эту строку следующим образом:

realm.delete(users[0]); 
+0

Это решение сработало, но мне интересно, как realm автоматически выводит на основе объекта, не сообщая ему о коллекции Class. –

+0

Поскольку объект создан из Realm, мы можем указать, какой тип объекта он есть, и удалить его соответствующим образом. – Ari

+0

из вашего ответа, мы явно не упоминаем, что тип объекта - это «Пользователь». –

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

  • Нет связанных вопросов^_^