এক্সকোড 9 জিএম - ডাব্লুকেউবিউ ভিউ এনএসকোডিং সমর্থনটি আগের সংস্করণগুলিতে ভেঙে গেছে


155

এক্সকোড 9 জিএম দিয়ে এই ত্রুটিটি কীভাবে সংশোধন করতে হয় তা কি কেউ জানেন? আমি এক্সকোড 8.3 দিয়ে তৈরি একটি অ্যাপে কাজ করছি, স্থাপনার লক্ষ্য আইওএস 9.3 এর জন্য এবং আমার আগে কখনও এই সমস্যা ছিল না had আমি এখানে বা অ্যাপল ফোরামগুলিতে এখনও কোনও তথ্য পাই না :(

সম্পাদনা: এই ত্রুটিটি এসেছিল যখন আমি কোনও ডাব্লুউইউবিউভিয় ইন্টারফেস বিল্ডারে রাখি, যদি না আমি প্রোগ্রামটি ব্যবহার করি।

ছবি WKWebView ত্রুটি দেখুন

সম্পাদনা 2: আচ্ছা, শেষ পর্যন্ত এটি কোনও বাগ নয়, এই আচরণ সম্পর্কে আরও তথ্যের জন্য নীচের কুইনের উত্তর দেখুন। ব্যাখ্যার জন্য তাকে ধন্যবাদ।


1
আমার উত্তর নীচে দেখুন। এটি এক্সকোড 9-এ কোনও বাগ নয়; এই বিল্ড ত্রুটি ব্যতীত, আপনি পরিবর্তে ইন-উইটকোডারে একটি ক্র্যাশ পেয়ে যাবেন: আইওএস ১১ এর আগে রানটাইম এ 11
কুইন টেলর

1
আমি কেবল আমার স্থাপনার লক্ষ্যমাত্রা 11
wei

উত্তর:


160

ত্রুটিটি সঠিক আচরণ, এবং এক্সকোড ৯-তে একটি বাগ নয়, যদিও ডাব্লুকেইউবভিউ আইওএস ৮ এ প্রবর্তিত হয়েছিল, তবে সেখানে একটি বাগ ছিল -[WKWebView initWithCoder:]যা কেবলমাত্র আইওএস ১১ এ স্থির করা হয়েছিল, যা সর্বদা রানটাইমের সময় ক্র্যাশ হয়ে যায় এবং এইভাবে ইন্টারফেস বিল্ডারের মধ্যে একটির কনফিগারেশন প্রতিরোধ করে।

https://bugs.webkit.org/show_bug.cgi?id=137160

আইবিতে ডেভেলপারদের এমন কিছু তৈরি করার অনুমতি দেওয়ার পরিবর্তে রানটাইমের সময় ভেঙে দেওয়া হবে, এটি বিল্ড ত্রুটি। আইওএস ১১ সম্প্রতি সম্প্রতি প্রকাশিত হওয়ায় এটি অসুবিধার সীমাবদ্ধতা রয়েছে, তবে সত্যিই অন্য কোনও ভাল বিকল্প নেই।

পুরানো মোতায়েনের লক্ষ্যমাত্রার জন্য কাজটি হ'ল কোডটিতে ডাব্লুউইউবিউভিউ যুক্ত করা অবিরত করা, যেমনটি তার উত্তরটিতে @ ফাহাদ-আশরাফ আগেই বর্ণনা করেছেন:

https://developer.apple.com/documentation/webkit/wkwebview


3
হাই কুইন, আমি বিশ্বাস করি যে ব্যক্তি অ্যাপল :-) এ কাজ করে সে সম্পর্কে আমি আপনার বাগ রিপোর্টটিও খুঁজে পেয়েছি: list.webkit.org/pipermail/webkit-unassigned/2014- সেপ্টেম্বর/ … আপনার উত্তরের জন্য ধন্যবাদ এটি নতুনের জন্য সত্যিই আশ্চর্যজনক আমার মতো বিকাশকারীরা যখন আমাদের মতো আচরণের মুখোমুখি হয়। আবার ধন্যবাদ.
মেহেদী চেন্নোফি

ধন্যবাদ! এটা দরকারী ছিল।
ssowri1

2
আমরা যদি আইওএস 10 এও সমর্থন করতে চাই তবে? আমার অ্যাপ্লিকেশনটিতে আমাকে আইওএস 10 টিও সমর্থন করা দরকার we আমরা কীভাবে এই সমস্যাটি সমাধান করতে পারি?
কালিকান্থ040494

শুধু কৌতূহল কেন এটি ঠিক করতে আইওএস 11 পর্যন্ত অ্যাপলকে কেন নিয়ে গেল?
ইমান

96

এটি Xcode 9 এ একটি বাগ বলে মনে হচ্ছে এবং এটি বিটাতে উপস্থিত ছিল। স্টোরিবোর্ডের মাধ্যমে আপনি যদি ডাব্লুউইউবিউভি তৈরি করছেন তবেই আপনি বিল্ড ত্রুটি পাবেন। আপনি যদি ক্রমানুসারে সংশ্লিষ্ট ভিউকন্ট্রোলার ক্লাস ফাইলে ডব্লিউউইউবভিউ তৈরি করেন তবে আপনার আইওএস ১১ এর নীচে আইওএস সংস্করণগুলি তৈরি করতে সক্ষম হওয়া উচিত এটি কীভাবে সম্পাদন করতে হয় তার জন্য অ্যাপলের ওয়েবসাইটে দেওয়া পদ্ধতিটি এখানে দেওয়া হল:

import UIKit
import WebKit
class ViewController: UIViewController, WKUIDelegate {

    var webView: WKWebView!

    override func loadView() {
        super.loadView()
        let webConfiguration = WKWebViewConfiguration()
        webView = WKWebView(frame: .zero, configuration: webConfiguration)
        webView.uiDelegate = self
        view = webView
    }
    override func viewDidLoad() {
        super.viewDidLoad()

        let myURL = URL(string: "https://www.apple.com")
        let myRequest = URLRequest(url: myURL!)
        webView.load(myRequest)
    }}

এরপরে আপনার যেমন WKWebView কার্যকারিতা কার্যকর হবে তেমন কার্যকর করতে হবে।

সূত্র: https://developer.apple.com/docamentation/webkit/wkwebview


5
ভুলে যাবেন নাsuper.loadView()
আলবিররোজো 7

super.loadView()শুরুতে হতে হবে। এটি ছাড়া কিছুই দেখায় না।
মাকালেলে

হাই :), আপনি কি জানেন কীভাবে আমি webviewআমার নেভিগেশনবারের নীচে এই সীমাবদ্ধতাগুলি সেট করতে পারি? আপনার এই সমাধানটি কাজ করে তবে এটি পুরো পর্দা জুড়ে।
আবেদ নাসেরি

@ আবেদনেসরি আমার মনে হয় আপনার কোনও প্রতিবন্ধকতা রাখার দরকার নেই ... আপনি স্টোরিবোর্ড ইনস্ট্যান্ট করতে পারেন এবং তারপরে স্ব.নিভিশনকন্ট্রোলার? .পুষভিউ কনট্রোলার (ইউভিসি, অ্যানিমেটেড: ট্রু) করতে পারেন।
এক্সিনোদা

58

আপনি যদি অন্য উপাদানগুলির সাথে একটি কাস্টমটিUIViewController উপলব্ধি করতে চান তবে স্টোরিবোর্ডের মাধ্যমে উদাহরণস্বরূপ বলা যেতে পারে একটি "ধারক" তৈরি করতে পারেন webViewContainer:

import UIKit
import WebKit
class ViewController: UIViewController, WKUIDelegate {
    @IBOutlet weak var webViewContainer: UIView!
    var webView: WKWebView!

    override func viewDidLoad() {
        super.viewDidLoad()
        let webConfiguration = WKWebViewConfiguration()
        let customFrame = CGRect.init(origin: CGPoint.zero, size: CGSize.init(width: 0.0, height: self.webViewContainer.frame.size.height))
        self.webView = WKWebView (frame: customFrame , configuration: webConfiguration)
        webView.translatesAutoresizingMaskIntoConstraints = false
        self.webViewContainer.addSubview(webView)
        webView.topAnchor.constraint(equalTo: webViewContainer.topAnchor).isActive = true
        webView.rightAnchor.constraint(equalTo: webViewContainer.rightAnchor).isActive = true
        webView.leftAnchor.constraint(equalTo: webViewContainer.leftAnchor).isActive = true
        webView.bottomAnchor.constraint(equalTo: webViewContainer.bottomAnchor).isActive = true
        webView.heightAnchor.constraint(equalTo: webViewContainer.heightAnchor).isActive = true
        webView.uiDelegate = self

        let myURL = URL(string: "https://www.apple.com")
        let myRequest = URLRequest(url: myURL!)
        webView.load(myRequest)
    }

আপনাকে অনেক ধন্যবাদ, এটি সত্যিই সাহায্য। এটি অ্যাপল দ্বারা একটি বাগ জানে
সাবেস্টিয়ান রেম

1
কাজ করছে! আইওএস 11 এবং দ্রুত 4.1-এ পরীক্ষা করা হয়েছে
অ্যালউইন 16'18

2
আপনি যদি ত্রুটিটি পেয়ে থাকেন [LayoutConstraints] Unable to simultaneously satisfy constraintsতবে লাইনটি ভুলে যাবেন না webView.translatesAutoresizingMaskIntoConstraints = false। যদি আপনি এটি সত্যে সেট করে রেখে দেন তবে এটি আপনার webViewস্বয়ংক্রিয়ভাবে পুরো বাধা তৈরি করবে যা আপনি প্রোগ্রামিকভাবে যুক্ত হওয়া সীমাবদ্ধতার সাথে দ্বন্দ্ব বোধ করবে। অ্যাপল ডক্স
mogelbuster

51

যদি আপনি পুরানো লক্ষ্য থেকে আইওএস 11.0 এ সরিয়ে থাকেন এবং এখনও আপনি এই ত্রুটিটি পেয়ে থাকেন তবে নীচের সমাধানটি ব্যবহার করুন।

  1. স্টোরিবোর্ডে (মেইন.স্টরিবোর্ড) যান, যে কোনও দৃশ্যে ক্লিক করুন।
  2. 'ফাইল ইন্সপেক্টর' নির্বাচন করুন যা এক্সকোডের ডান দিকের সম্পত্তি উইন্ডো
  3. ' বিল্ডস ফর ' এর মান ' আইওএস ১১.০ এবং তারপরে ' পরিবর্তন করুন
  4. সংকলন এবং নির্মাণ

এখানে চিত্র বর্ণনা লিখুন


2
@ ভাইচাস্লাভ জার্চিকভ: আমি আপনার সম্পর্কে জানি না, তবে শিল্পে আমাদের এমন পুরানো প্রকল্প রয়েছে যা নতুন প্রযুক্তিতে রূপান্তরিত হওয়া দরকার। তাই অনেকে একই সমস্যার মুখোমুখি। আমি ইতিমধ্যে উত্তরে উল্লেখ করেছি যে "যদি আপনি পুরানো লক্ষ্য থেকে সরে যান"। একটি মাত্র কেস নিয়ে ভাববেন না।
কাম্পাই

1
এই বিরক্তিকর আইবি সেটআপটি নির্দেশ করার জন্য এটি আমার জন্য ধন্যবাদ কাজ করে। সতর্কতা অবিলম্বে চলে গেছে। আসলে, আমি এটিকে আরও ব্যবহারিক বলে মনে করি এবং এর উত্তর গ্রহণ করা উচিত। @ কমপাইয়ের সাথে সম্মত হোন, আসলে, আমরা আইওএসের নতুন সংস্করণে যেতে বাধ্য হচ্ছি, যেহেতু অ্যাপল তাদের মৌলিক কাঠামো পরিবর্তন করে চলেছে
infinity_coding7

আইওএস 10.x অ্যাপ্লিকেশন ক্রাশ হয়ে সিমুলেটারে চলার পরে এটি করার পরে।
রামিস

@ রমিস: আমি এটি আইওএস 10 এর জন্য করছিলাম, আমি কখনই অ্যাপ ক্রাশ পাইনি, ক্র্যাশ লগটি কী ছিল?
কাম্পাই

1
এই সমস্যাটি সমাধানের সহজ সমাধান। ধন্যবাদ!
জেরি চং

18

আমি একই সমস্যার মুখোমুখি হয়েছি তবে আমরা যদি ডাব্লুউইউবিউভিউ প্রোগ্রামক্রমে যুক্ত করি তবে তা সামাল দেওয়া যাবে

  1. স্টোরিবোর্ডে আপনি যে নকশাটি তৈরি করতে চান তা করুন তবে ডাব্লুউইউবিউভিউর জন্য জায়গাটি ছেড়ে দিন, সেই জায়গাতে একটি ভিউ টেনে আনুন এবং এটিকে ওয়েবভিউ কনটেনার হিসাবে নাম দিন এবং এই দুটি বৈশিষ্ট্য ঘোষণা করুন,

    @property (weak, nonatomic) IBOutlet UIView *webViewContainer;
    @property(nonatomic, strong)WKWebView *webView;
  2. এখন ওয়েব ভিউ তৈরি করুন এবং যুক্ত করুন:

    -(instancetype)initWithCoder:(NSCoder *)aDecoder
    {
        self.webView = [self createWebView];
        self = [super initWithCoder:aDecoder];
        return self;
    }

    createWebView ফাংশনটি হিসাবে ঘোষণা করা হয়েছে,

    -(WKWebView *)createWebView
    {
         WKWebViewConfiguration *configuration = 
                   [[WKWebViewConfiguration alloc] init];
         return [[WKWebView alloc] initWithFrame:CGRectZero configuration:configuration];
    }
  3. এখন এই নতুন তৈরি ওয়েবভিউটি আপনার ধারকভিউতে যুক্ত করুন, এর মতো:

    -(void)addWebView:(UIView *)view
    {
          [view addSubview:self.webView];
          [self.webView setTranslatesAutoresizingMaskIntoConstraints:false];
          self.webView.frame = view.frame;
    }
  4. অবশেষে, কেবল আপনার ইউআরএলটি লোড করুন,

    -(void)webViewLoadUrl:(NSString *)stringUrl
    {
         NSURL *url = [NSURL URLWithString:stringUrl];
         NSURLRequest *request = [NSURLRequest requestWithURL:url];
         [self.webView loadRequest:request];
    }

এটি পড়ার জন্য ধন্যবাদ।


3

ওয়েবকিট চালু হয় iOS 8 এ কিন্তু এটা, আপনি ব্যবহার করে থাকেন যা রানটাইম দুর্ঘটনায় সৃষ্ট প্রতিক্রিয়ায় একটি ত্রুটির কথা মুক্তি Xcode 9/10 , কম আপনার প্রকল্পের কনফিগারেশন সমর্থন আইওএস 11 এবং আপনি ইন্টারফেস রচয়িতা ব্যবহার WKWebView যোগ করার জন্য চেষ্টা করছেন পারেন। এক্সকোড অবিলম্বে একটি সংকলন-সময় ত্রুটি দেখায়।

আইওএস 11.0 এর আগে ডব্লিউউইউব ভিউ (এনএসকোডিং সমর্থনটি আগের সংস্করণে ভেঙে গেছে)

যদিও ডব্লিউকেউইউভিউ আইওএস 8-এ চালু হয়েছিল , তবে একটি বাগ ছিল - [ডব্লিউকেউইউব ভিউ ইনকোডকোডার:] যা কেবল আইওএস 11 এ স্থির হয়েছিল ।

এখানে চিত্র বর্ণনা লিখুন

রেজোলিউশনটি হ'ল কোডের মাধ্যমে আপনাকে অবশ্যই WKWebView যুক্ত করতে হবে (কেবলমাত্র আপনি যদি আইওএস 11 এর নীচে সমর্থন করছেন)। এটা আসলে অদ্ভুত লাগে।

আর একটি সমাধান হ'ল ইন্টারফেস বিল্ডার ডকুমেন্ট বিল্ডগুলি আইওএস 11 এবং তার পরে বিকল্পগুলির জন্য পরিবর্তন করা (যদি আপনি পুরানো লক্ষ্য থেকে আইওএস 11 এ স্থানান্তরিত হন এবং এখনও একই ত্রুটি পান) getting


1

// সুইফ্টের জন্য

import WebKit

class ViewController: UIViewController {
var webView: WKWebView!

// MARK:- WebView Configure
override func loadView() {
    let webConfig = WKWebViewConfiguration()
    webView = WKWebView(frame: .zero, configuration: webConfig)
    view = webView
}


override func viewDidLoad() {
    super.viewDidLoad()
    // call urlrequest fun
    loadURLRequest()
}

//MARK:- Webview URLRequest
func loadURLRequest()  {
    let urlString = "https://www.google.com"
    let url = URL(string: urlString)
    let urlRequest = URLRequest(url: url!)
    webView.load(urlRequest)
}
}

// উদ্দেশ্য সি জন্য

#import <WebKit/WebKit.h>

@interface ViewController ()<WKNavigationDelegate,WKUIDelegate>{
WKWebView *webView;
}

@end

@implementation ViewController

- (void)viewDidLoad {
[super viewDidLoad];
    
NSURL *url = [[NSURL alloc] initWithString: @"https://www.google.com"];
    NSURLRequest *request = [[NSURLRequest alloc] initWithURL: url];
    [webView loadRequest: request];
}


- (void)loadView {
[super loadView];

WKWebViewConfiguration *configu = [[WKWebViewConfiguration alloc] init];
webView = [[WKWebView alloc] initWithFrame:CGRectZero configuration:configu];
webView.UIDelegate = self;
self.view = webView;
}

@end

এখানে চিত্র বর্ণনা লিখুন


0

কাম্পাইয়ের উত্তরে এটি একটি মন্তব্য হওয়া উচিত, তবে মন্তব্য করার মতো যথেষ্ট খ্যাতি পয়েন্ট আমার কাছে নেই।

বর্ণিত আইওএস সংস্করণ ছাড়াও 'ফাইল ইন্সপেক্টর'-এ' বিল্ড ফর ফর 'ড্রপডাউন-এ ডিপ্লোয়মেন্ট টার্গেট (..) বিকল্প রয়েছে। আমি যদি সম্ভব হয় তবে একসাথে সংস্করণগুলি পরিচালনা করতে পছন্দ করি এবং যাইহোক বিল্ড টার্গেটটি পরিবর্তন করতে চেয়েছিলাম। আমি পুরোপুরি বিভ্রান্ত হয়ে পড়েছিলাম এটি এখনও ডিপ্লোয়মেন্ট টার্গেট (9.3) বলেছে যদিও আমি সাধারণ সেটিংসগুলিতে সংশ্লিষ্ট এন্ট্রিটি 11.0 এ পরিবর্তন করেছি

এক্সকোড পুনরায় চালু (11.3.1) প্রত্যাশা অনুযায়ী সবকিছু কাজ করার জন্য প্রয়োজনীয় ছিল, 'ডিপ্লোয়মেন্ট টার্গেট (১১.০)' বিকল্পটি ছিল (এবং ৯.৩ চলে গেছে)। নির্বাচনের পরে সবকিছু প্রত্যাশিত হিসাবে কাজ করেছিল।


0
import UIKit
import WebKit

class ViewController: UIViewController, WKUIDelegate {
    
    @IBOutlet weak var webViewContainer: UIView!
    private var webView: WKWebView?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        addWebView()
        
        let myURL = URL(string: "https://www.apple.com")
        if let myURL = myURL {
            let myRequest = URLRequest(url: myURL)
            webView?.load(myRequest)
        }
    }
    
    private func addWebView() {
        let webConfiguration = WKWebViewConfiguration()
        let size = CGSize.init(width: 0.0, height: self.webViewContainer.frame.size.height)
        let customFrame = CGRect.init(origin: CGPoint.zero, size: size)
        self.webView = WKWebView (frame: customFrame, configuration: webConfiguration)
        if let webView = self.webView {
            webView.translatesAutoresizingMaskIntoConstraints = false
            self.webViewContainer.addSubview(webView)
            webView.topAnchor.constraint(equalTo: webViewContainer.topAnchor).isActive = true
            webView.rightAnchor.constraint(equalTo: webViewContainer.rightAnchor).isActive = true
            webView.leftAnchor.constraint(equalTo: webViewContainer.leftAnchor).isActive = true
            webView.bottomAnchor.constraint(equalTo: webViewContainer.bottomAnchor).isActive = true
            webView.heightAnchor.constraint(equalTo: webViewContainer.heightAnchor).isActive = true
            webView.uiDelegate = self
        }
    }
}

-5

ইউআইউইউবভিউ আইওএস 11 এ ছিন্ন করা হয়েছে এবং ডব্লিউকেউইউভিউ কেবল iOS11 এ কাজ করে - এটি Xcode GM তে বাগের মতো শোনাচ্ছে।


হাঁ। আপনি যদি iOS এর পূর্ববর্তী সংস্করণে স্থাপন করতে চান তবে আমি কেবলমাত্র একমাত্র কাজটি পেয়েছি তা হ'ল আপনার ডব্লিউকেউব ভিউ প্রোগ্রামক্রমে যুক্ত করা।
মেহেদী চেন্নুফি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.