Удаление веб-просмотров из родительских представлений приводит к сбою приложения в iOS 10

#ios #titanium #appcelerator #appcelerator-titanium

#iOS #titanium #ускоритель приложений #ускоритель приложений -titanium

Вопрос:

С недавним обновлением до iOS 10 и Titanium SDK 5.5.1.GA , мое приложение выходит из строя при попытке удалить webview из родительского представления. Webview правильно загружает HTML, но при попытке вернуться приложение завершается с ошибкой.

Код:

     var aItems = view.children; //<- fails on this line if parent view has a webview child
    for( var i = aItems.length - 1; i >= 0; i-- ) {

        aItems[ i ].backgroundImage = "";
        aItems[ i ].image = "";
        view.remove( aItems[ i ] );
        aItems[ i ] = null;
    }
  

Ошибка:

     error   10:37:52.693612 -0500   NSURLConnection finished with error - code -1001
    default 10:37:52.851682 -0500   invalid mode 'kCFRunLoopCommonModes' provided to CFRunLoopRunSpecific - break on _CFRunLoopError_RunCalledWithInvalidMode to debug. This message will only appear once per execution.
  

Версия:

     Operating System
      Name                        = Mac OS X
      Version                     = 10.12
      Architecture                = 64bit
      # CPUs                      = 8
      Memory                      = 8589934592
    Node.js
      Node.js Version             = 5.11.1
      npm Version                 = 3.8.6
    Titanium CLI
      CLI Version                 = 5.0.9
    Titanium SDK
      SDK Version                 = 5.5.1.GA
      Target Platform             = iphone
  

Это происходит только на iOS, а не на Android.

ОБНОВЛЕНИЕ: если я не устанавливаю какой-либо HTML в webview, приложение работает нормально. Я удаленно получаю html, а затем устанавливаю его в webview.

Комментарии:

1. Если вы можете воспроизвести эту ошибку в автономном приложении, скорее всего, это ошибка. О чем следует сообщать в Appcelerator Jira: jira.appcelerator.org/secure/Dashboard.jspa Если вы это сделаете, укажите ссылку на билет в комментариях здесь!

2. jira.appcelerator.org/browse/AC-4560 <— сделал тикет jira для выдачи

Ответ №1:

Вы могли обнулить дочерние элементы раньше:

 for(var i in view.children) view.children[i] = null;
  

Теперь у вас есть два способа, которые вы можете попробовать:

1) используйте метод «removeAllChildren» вместо выполнения цикла и удаления?

 view.removeAllChildren();
  

2) попробуйте установить для свойства views значение пустой массив после обнуления его дочерних элементов:

 view.children = [];
  

В любом случае, я думаю, что это ошибка платформы, вам следует создать билет JIRA

Комментарии:

1. Я попробую это и сообщу вам, работает это или нет. Спасибо за вашу помощь!

2. Я попробовал ваше решение, но оно не устранило проблему. В итоге я создал тестовое приложение и все же смог создать проблему. Я ввожу тикет jira для ошибки. Спасибо за вашу помощь.