Adakah yang tahu cara memperbaiki kesalahan ini dengan Xcode 9 GM? Saya sedang mengerjakan aplikasi yang dibuat dengan Xcode 8.3, target penyebaran adalah untuk iOS 9.3 dan saya tidak pernah mengalami masalah ini sebelumnya. Saya belum menemukan informasi di sini atau di forum Apple :(
Sunting: Kesalahan ini terjadi ketika saya memasukkan WKWebView ke pembuat antarmuka, bukan jika saya menggunakannya secara terprogram.
Sunting 2: Ya, itu akhirnya bukan bug, lihat jawaban Quinn di bawah untuk mendapatkan informasi lebih lanjut tentang perilaku ini. Terima kasih padanya untuk penjelasannya.
Jawaban:
Kesalahannya adalah perilaku yang benar, dan bukan bug di Xcode 9. Meskipun WKWebView diperkenalkan di iOS 8, ada bug di dalamnya
-[WKWebView initWithCoder:]
yang hanya diperbaiki di iOS 11, yang selalu macet saat runtime dan karenanya mencegah konfigurasi satu di dalam Interface Builder.https://bugs.webkit.org/show_bug.cgi?id=137160
Alih-alih mengizinkan pengembang untuk membangun sesuatu di IB yang akan rusak saat runtime, itu adalah kesalahan build. Ini adalah batasan yang tidak nyaman karena iOS 11 baru saja dirilis, tetapi sebenarnya tidak ada pilihan lain yang bagus.
Solusi untuk target penempatan yang lebih lama adalah untuk terus menambahkan kode WKWebView, karena @ fahad-ashraf sudah dijelaskan dalam jawabannya:
https://developer.apple.com/documentation/webkit/wkwebview
sumber
Ini sepertinya merupakan bug di Xcode 9 dan juga ada di betas. Anda hanya akan mendapatkan galat build jika Anda membuat WKWebView melalui storyboard. Jika Anda secara progmatic membuat WKWebView dalam file kelas ViewController yang sesuai, Anda harus dapat membangun versi iOS di bawah iOS 11. Berikut adalah pendekatan yang diberikan di situs web Apple untuk bagaimana menyelesaikannya:
Anda kemudian dapat mengimplementasikan fungsionalitas WKWebView seperti biasa.
Sumber: https://developer.apple.com/documentation/webkit/wkwebview
sumber
super.loadView()
super.loadView()
harus di awal. Tanpa itu, tidak ada yang terlihat.webview
bawah NavigationBar saya? Solusi Anda ini berfungsi tetapi mencakup seluruh layar.Jika Anda ingin mewujudkan kebiasaan
UIViewController
dengan komponen lain selain itu Anda dapat membuat "wadah" melalui storyboard yang disebut misalnyawebViewContainer
:sumber
[LayoutConstraints] Unable to simultaneously satisfy constraints
, jangan lupa garisnyawebView.translatesAutoresizingMaskIntoConstraints = false
. Jika Anda membiarkannya menjadi true, itu akan membuat seluruh rangkaian kendala untuk AndawebView
secara otomatis yang akan bertentangan dengan kendala yang Anda tambahkan secara programatis. Apple Documents .Jika Anda dipindahkan dari target lama ke iOS 11.0 dan masih Anda mendapatkan kesalahan ini, maka gunakan solusi di bawah ini.
sumber
Saya telah menghadapi masalah yang sama tetapi bisa diatasi jika kita menambahkan WKWebView secara terprogram.
Lakukan desain apa pun yang ingin Anda buat di storyboard tetapi tinggalkan ruangan untuk WKWebView , di area itu seret & letakkan tampilan dan beri nama sebagai webViewContainer dan nyatakan dua properti ini,
Sekarang buat dan tambahkan webView seperti ini:
Fungsi createWebView dinyatakan sebagai,
Sekarang tambahkan webView yang baru dibuat ini ke containerView Anda, seperti ini:
Akhirnya, muat Url Anda seperti ini,
Terima kasih sudah membaca ini.
sumber
WebKit diperkenalkan di iOS 8 tetapi dirilis dengan kesalahan yang menyebabkan crash runtime, Jika Anda menggunakan Xcode 9/10 , konfigurasi proyek Anda mendukung kurang dari iOS 11 dan jika Anda mencoba menambahkan WKWebView menggunakan pembangun antarmuka. Xcode segera menunjukkan kesalahan waktu kompilasi.
WKWebView sebelum iOS 11.0 (Dukungan NSCoding rusak di versi sebelumnya)
Meskipun WKWebView diperkenalkan di iOS 8 , ada bug di - [WKWebView initWithCoder:] yang hanya diperbaiki di iOS 11 .
Penyelesaiannya adalah Anda harus menambahkan kode WKWebView melalui (Hanya jika Anda mendukung di bawah iOS 11). Itu sebenarnya terdengar aneh.
Solusi lain adalah mengubah Builder Document Builds untuk opsi ke iOS 11 dan yang lebih baru (Jika Anda bermigrasi dari target lama ke iOS 11 dan masih mendapatkan kesalahan yang sama).
sumber
// Untuk Swift
// Untuk Tujuan C
sumber
Ini seharusnya menjadi komentar atas jawaban Kampai, tetapi saya tidak memiliki poin reputasi yang cukup untuk berkomentar.
Selain versi iOS eksplisit, dropdown 'Builds for' di 'File Inspector' juga berisi opsi Deployment Target (..) . Saya lebih suka mengelola versi di satu tempat jika memungkinkan dan ingin mengubah target pembangunan. Saya sepenuhnya bingung itu masih mengatakan Deployment Target (9.3) meskipun saya mengubah entri yang sesuai dalam pengaturan umum ke 11.0 .
Restart XCode (11.3.1) diperlukan untuk membuat semuanya berfungsi seperti yang diharapkan, opsi 'Deployment Target (11.0)' tersedia (dan 9.3 hilang). Setelah pemilihan semuanya bekerja seperti yang diharapkan.
sumber
sumber
UIWebView sudah usang di iOS11 dan WKWebView hanya berfungsi di iOS11 - ini terdengar seperti bug di Xcode GM.
sumber