Реагировать на собственное IllegalViewOperationException - Попытка удалить индекс представления выше числа детей 0 тег представления: 1
Я нашел эту проблему в моем App.js, который имел следующий метод рендеринга:
render() {
if (this.state.isDownloading) {
return (
<View>
<Spinner
visible={this.state.isDownloading}
textContent={this.state.loadingText}
overlayColor={Colors.COLOR_MODAL_BACKDROP}
animation={UIConst.ANIMATION_TYPE.NONE}
textStyle={styles.spinnerTextStyle}
/>
</View>
);
}
return (
<Provider store={Store}>
<Router />
</Provider>
);
}
Я нашел эту проблему только на Android, выпущенном apk, он отлично работает для iOS. В основном я использовал CodePush. Поэтому, когда код-push загружает и устанавливает обновление, отображается. - isDownloading: состояние, в котором хранится логическое значение, чтобы проверить, обновляется ли приложение. -: будет отображаться, когда code-push обновляет приложение. -: Reaction-redux -: реагировать-родной-маршрутизатор-поток Сбой происходит после завершения установки push-кода и перезапуска приложения.
Libraries used are :-
1. "react-native-code-push": "^5.2.0-beta",
2. "react-native-loading-spinner-overlay": "^0.5.2",
3. "react-native-router-flux": "^4.0.0-beta.24",
4. "react-redux": "^5.0.5"
Отчет о сбое:-
Fatal Exception: com.facebook.react.uimanager.IllegalViewOperationException: Trying to remove a view index above child count 0 view tag: 1
detail: View tag:-1
children(0): [
],
indicesToRemove(1): [
0,
],
tagsToDelete(1): [
113,
]
at com.facebook.react.uimanager.NativeViewHierarchyManager.manageChildren(NativeViewHierarchyManager.java:346)
at com.facebook.react.uimanager.UIViewOperationQueue$ManageChildrenOperation.execute(UIViewOperationQueue.java:177)
at com.facebook.react.uimanager.UIViewOperationQueue$1.run(UIViewOperationQueue.java:776)
at com.facebook.react.uimanager.UIViewOperationQueue.flushPendingBatches(UIViewOperationQueue.java:855)
at com.facebook.react.uimanager.UIViewOperationQueue.access$1600(UIViewOperationQueue.java:46)
at com.facebook.react.uimanager.UIViewOperationQueue$2.runGuarded(UIViewOperationQueue.java:813)
at com.facebook.react.bridge.GuardedRunnable.run(GuardedRunnable.java:21)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6123)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:757)
1 ответ
У меня просто была похожая ошибка. Я также использую Redux и Codepush.
Посмотрите на эту проблему в репозитории codepush https://github.com/Microsoft/react-native-code-push/issues/986
Ты используешь codePushStatusDidChange
перехват событий в вашем коде?
Кажется, моя проблема исправлена после удаления всех изменений состояния из UPDATE_INSTALLED
дело.
например
codePushStatusDidChange(status: number): void {
switch(status) {
// ...
case codePush.SyncStatus.UPDATE_INSTALLED:
// REMOVE ALL STATE CHANGES FROM HERE !!!!
// empty case to prevent android APK crash
break
// ...
}
}
Добавление некоторых других случаев к ответу @niklasj:
1.Для тех, кто не использует codePushStatusDidChange
убедитесь, что вы не делаете много setState
в то время как codepush.sync()
выполняется.
2. Для тех, кто использует react-native-restart
лучше убедиться что ты не звонишь restart()
когда codepush.sync()
также перезапускает приложение.