0
Thumbsup

いい質問だ

0

Thumbsdown

うーん

Titanium SDK5.3.0.GAでiOSのwebviewがクラッシュする

reinisyed
reinisyed 60

投稿日:2016-06-29 19:10:44

いつもお世話になっております。
件名のiOS版WebViewにて画面をクローズ後にWebViewのネイティブでクラッシュする問題が発生しており、解決方法を探しています。

環境
iOS 9.3.2 iPad Air実記
Titanium SDK5.3.0.GA

手順
1:htmlファイル又はhtml文字列をwebviewに読み込ませる。
2:webviewをクローズして別のWindouwを開くこうとする
3:クラッシュする

webviewに対しhtmlのデータを読み込ませない場合は特に問題が起きません。
htmlタグだけなどの最小限のhtmlデータであっても必ずクラッシュします。
Titanium SDK5.2.2.GAでは起きていませんでした。

[ERROR] : The application has crashed with an uncaught exception 'NSRangeException'.
[ERROR] : Reason:
[ERROR] : *** -[NSCFString substringFromIndex:]: Index 89 out of bounds; string length 88
[ERROR] : Stack trace:
[ERROR] :

[ERROR] : 0 CoreFoundation 0x0000000181aaadb0 + 124
[ERROR] : 1 libobjc.A.dylib 0x000000018110ff80 objcexceptionthrow + 56
[ERROR] : 2 CoreFoundation 0x0000000181aaacf8 + 0
[ERROR] : 3 Foundation 0x00000001823b9ba0 + 132
[ERROR] : 4 CaLaboBridge 0x00000001000eb514 CaLaboBridge + 324884
[ERROR] : 5 CaLaboBridge 0x00000001001b9518 CaLaboBridge + 1168664
[ERROR] : 6 CFNetwork 0x00000001821896a8 + 72
[ERROR] : 7 CFNetwork 0x0000000182077cd8 + 32
[ERROR] : 8 libdispatch.dylib 0x00000001814f547c + 16
[ERROR] : 9 libdispatch.dylib 0x00000001814fe7b8 + 540
[ERROR] : 10 CFNetwork 0x0000000182077ca8 + 36
[ERROR] : 11 CoreFoundation 0x000000018198867c CFArrayApplyFunction + 68
[ERROR] : 12 CFNetwork 0x0000000182077b8c + 136
[ERROR] : 13 CFNetwork 0x0000000182077a4c + 312
[ERROR] : 14 CFNetwork 0x0000000182077878 + 68
[ERROR] : 15 CoreFoundation 0x0000000181a6109c + 24
[ERROR] : 16 CoreFoundation 0x0000000181a60b30 + 540
[ERROR] : 17 CoreFoundation 0x0000000181a5e830 + 724
[ERROR] : 18 CoreFoundation 0x0000000181988c50 CFRunLoopRunSpecific + 384
[ERROR] : 19 CFNetwork 0x0000000182109c68 + 412
[ERROR] : 20 Foundation 0x000000018247fe4c + 1000
[ERROR] : 21 libsystempthread.dylib 0x000000018170fb28 + 156
[ERROR] : 22 libsystem
pthread.dylib 0x000000018170fa8c + 0
[ERROR] : 23 libsystempthread.dylib 0x000000018170d028 threadstart + 4
[ERROR] : *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[
NSCFString substringFromIndex:]: Index 89 out of bounds; string length 88'
[ERROR] : *** First throw call stack:
[ERROR] : (0x181aaadb0 0x18110ff80 0x181aaacf8 0x1823b9ba0 0x1000eb514 0x1001b9518 0x1821896a8 0x182077cd8 0x1814f547c 0x1814fe7b8 0x182077ca8 0x18198867c 0x182077b8c 0x182077a4c 0x182077878 0x181a6109c 0x181a60b30 0x181a5e830 0x181988c50 0x182109c68 0x18247fe4c 0x18170fb28 0x18170fa8c 0x18170d028)


再現するコードを貼ってもらえると調査できます --- yagi_


回答

reinisyed
reinisyed
60

Thumbsup

いい回答

0

Thumbsdown

うーん

申し訳ありません、自己解決致しました。
理由はよく分からないのですがwebviewを使いつつ、下記のようにバックグラウンドで画像を取得する処理を行なっていたのですが
無効なURLを入れた瞬間にtry catchに掛からずこけるようです、おまけにwebviewを使っていないと発生しないという分けがわからない現象でした。

var imagePath = Ti.Filesystem.getFile(Util.getDir()).getNativePath() + '/' + Ti.Utils.sha1(url);
var imageFile = Ti.Filesystem.getFile(imagePath);

if (imageFile.exists()) {
    callback(imageFile);
} else {
    var xhr = Titanium.Network.createHTTPClient();

    xhr.onload = function(e) {
        if (xhr.responseData != null) {
            imageFile.write(xhr.responseData);
            callback(imageFile);
        }
    }

    xhr.onerror = function(e) {
        Ti.API.error('イメージキャッシュURL:'+url);
    };

    xhr.open('GET', url);
    xhr.send();
}

ログインすると回答することができます。