আইবিআউটলেট শূন্য, তবে এটি স্টোরিবোর্ড, সুইফটে সংযুক্ত


102

সুইফট 1.1 এবং এক্সকোড 6.2 ব্যবহার করে।

আমার কাছে একটি ইউআইএসটিবোর্ড রয়েছে যা একটি একক, কাস্টম UIViewControllerসাবক্লাসযুক্ত। এটিতে আমার কাছে সেই কন্ট্রোলার থেকে স্টোরিবোর্ডের একটি সাবক্লাসে@IBOutlet টাইপের সংযোগ রয়েছে । আমারও সেই মতামতের সাবভিউয়ের জন্য একই রকম আউটলেট রয়েছে। চিত্র দেখুনUIViewUIView

তবে রান সময়ে, এই বৈশিষ্ট্যগুলি শূন্য (চিত্র বি)। যদিও আমি আশ্বাস দিয়েছি আমি ইন্টারফেস বিল্ডারের আউটলেটগুলি সংযুক্ত করেছি।

চিন্তা :

  • এটা কি সম্ভব যে আমি একটি সাবক্লাসের একটি সাবক্লাস ব্যবহার করছি কারণ কিছুতে আরম্ভের সাথে গোলমেলে? আমি কোনও আরম্ভকারীকে ওভাররাইড করছি না
  • awakeFromNib: কোন কারণে ফোন করা হচ্ছে না
  • হতে পারে এটি সাবভিউতে সংক্ষিপ্তসারগুলির সাথে সংযোগ স্থাপন করছে না

আমি যে জিনিসগুলি চেষ্টা করেছি:

  • ম্যাচিং @IBOutletএবং স্টোরিবোর্ড আইটেমের ধরণগুলি ঠিক (পরিবর্তে UIView)
  • সম্পত্তি এবং আউটলেট মোছা এবং এগুলি পুনরায় যুক্ত করা হয়েছে

চিত্র এ

চিত্র এ *

চিত্র বি

চিত্র বি

* অস্পষ্ট কোডটি Figure Aহল:

@IBOutlet private var annotationOptionsView: UIView!
@IBOutlet private var arrivingLeavingSwitch: UISegmentedControl!

ধন্যবাদ.


কেন বদলাবেন না! প্রতি ?

ক্লিয়ারভিউ শূন্য হয়েছে কারণ স্টোরিবোর্ডের সাথে লিঙ্কযুক্ত নেই (কোনও গর্তের সাথে কোডের বাম দিকে বৃত্তটি দেখুন, এটি লিঙ্কযুক্ত নয় বলে বোঝায়), স্ক্রিনশটে আমি টিকাকর্ষণ অপশনভিউয়ের ঘোষণাকে দেখতে পাচ্ছি না।
জাভেয়ের ফ্ল্লোস ফন্ট

@ জাভিয়েরফ্লোরাসফন্ট: clearViewআমি শূন্য থাকব বলে আশা করি। এটি এমন কিছু যা আমি এখনও রিফ্যাক্টর করতে পারি না। এছাড়াও চিত্র এ এর ​​পাদটীকা দেখুন @ শানসিংহ এটি হওয়া উচিত! কারণ স্টোরিবোর্ডগুলি থেকে সংযোগগুলি রানটাইমের সময় সেট করা (মনে করা উচিত) এবং নিষ্ক্রিয় হওয়া উচিত নয়।
স্টিফান আরামবাচিচ

এই দৃশ্য নিয়ন্ত্রণকারীটি কীভাবে লোড হবে? এটির জন্য জিজ্ঞাসা করা কোডটি আমাদের দেখান, বা এর সাথে সংযুক্ত সেগের বর্ণনা দিন।
রব মায়ফ

1
এটি সঠিক স্টোরিবোর্ডটি পাচ্ছে:let vc = UIStoryboard(name: "LocationPickerModal", bundle: nil) .instantiateViewControllerWithIdentifier("LocationPickerModalViewController") as LocationPickerModalViewController
স্টেফান আরামবাশিচ

উত্তর:


146

সাধারণত এটি ঘটে থাকে কারণ আপনার ভিউ কন্ট্রোলার এখনও পর্যন্ত তার দর্শন শ্রেণিবদ্ধ লোড করেনি। কোনও দৃশ্য viewবার্তা প্রেরণ করলে কোনও ভিউ কন্ট্রোলার কেবল তার ভিউয়ের স্তরক্রম লোড করে load সিস্টেমটি এই যখন এটা সময় আসলে পর্দা, যার পরে ভালো জিনিস ঘটবে দর্শন অনুক্রমের করা হয় prepareForSegue:sender:এবং viewWillAppear:ফিরে এসেছ।

যেহেতু আপনার ভিসি এখনও পর্যন্ত এর দৃশ্যরূপক্রমটি লোড করেনি, আপনার আউটলেটগুলি এখনও শূন্য।

আপনি ভিসিকে বলার জন্য এই ভিউয়ের স্তরক্রম লোড করতে বাধ্য করতে পারেন _ = self.view


4
যখন viewWillAppear:এটি ডাকা হয় তখন এটি ঘটে থাকে , প্রথম বার আমি সেই আউটলেটটি দিয়ে কিছু করি। ভিউ অ্যাক্সেস করা আমার পক্ষে কিছু করে না। এখনও শূন্য।
স্টিফান আরামবাচিচ

ধন্যবাদ! এটি আমার পক্ষেও কাজ করেছিল। var v = ভিউকন্ট্রোলআরভিউ; দর্শনের শ্রেণিবদ্ধতা লোড করতে বাধ্য। খুব সুন্দর কৌশল! ;)
ইয়ার্ডি আয়েস্টারস্পট

@ YordiUytersprot- কে এই লাইনটি আপনি কোথায় রাখবেন?
Async-

4
আচ্ছা, আপনি যদি কোনও ভিউকন্ট্রোলার ইনস্ট্যান্ট করেন: ভিসি = সেলফ স্টোরবোর্ড? CustomVC; দেখা যাক = ভিসি ভিউ; // এখনই, আপনি এখানে কাস্টমভিসি থেকে আইবিউটলেটগুলি অ্যাক্সেস করতে পারেন .. vc.customTextField.text = "লালালা"; আশা করি এটি আপনাকে সাহায্য করবে! :)
Yordi Uytersprot

4
UIViewcontroller.loadViewIfNeeded()এখানে ব্যবহার করার সঠিক পদ্ধতি।
orkoden

27

আপনি পণ্য> ক্লিন চালানোর চেষ্টা করেছেন? আমার জন্য খুব অনুরূপ সমস্যা সমাধান করেছেন।


আমি করেছিলাম. দুঃখিত, আমার উত্তর চিহ্নিত করার উদ্দেশ্যে। আমি কেবলমাত্র DerivedDataপ্রকল্পের ফোল্ডারটি মুছে ফেলার পরে এটি কাজ শুরু করে ।
স্টিফান আরামবাশিচ

3
আমার দর্শনের মধ্যভাগে আমার দুটি আউটলেট শূন্য ছিল .. পণ্য -> ক্লিন আমার জন্য কাজ করেছিল!
রিক্কো

1
আপত্তি সি, প্রকল্পটি পরিষ্কার করা কেবল আমার জন্য কাজ করেছে ... এক ঘণ্টারও বেশি সময় ব্যয় করতে পারেন এবং প্রকল্পটি পরিষ্কার করার চিন্তাও করেননি: / তবে আপনাকে ধন্যবাদ !!
গ্রিনহাউস

জাস্ট প্রোডাক্ট -> ক্লিন আমার পক্ষে কাজ করে নি, তবে আমি একটি আলাদা সিমুলেটর শুরু করেছি এবং এটি কাজ করেছে, সুতরাং ডেরিভডডাটা ফোল্ডারেও কিছু ভুল থাকতে হবে।
এন্ডেভিড

22

আপনি কি স্টোরিবোর্ড বা এনআইবি থেকে আপনার ভিউ কন্ট্রোলারকে ইনস্ট্যান্ট করেছেন, নাকি আপনি সরাসরি কোনও ইনিশিয়ালাইজারের মাধ্যমে ইনস্ট্যান্ট করেছেন?

আপনি যদি প্রাথমিক শ্রেণীর সাথে সরাসরি আপনার ক্লাস ইনস্ট্যান্ট করেন তবে আউটলেটগুলি সংযুক্ত হবে না। ইন্টারফেস বিল্ডার আপনার ক্লাসগুলির কাস্টমাইজড দৃষ্টান্ত তৈরি করে এবং বারবার ডিকোডিংয়ের জন্য এনআইবি এবং স্টোরিবোর্ডগুলিতে সেই উদাহরণগুলি এনকোড করে, এটি ক্লাসগুলি নিজেরাই সংজ্ঞায়িত করে না। এটি যদি আপনার সমস্যা হয়ে থাকে তবে ইউআইএসটিরিবোর্ডে বা ইউআইএনআইবিতে পদ্ধতিগুলি ব্যবহার করার জন্য আপনাকে কেবল নিজের কোডার তৈরি করার কোডটি পরিবর্তন করতে হবে।


2
আমি একটি UIStoryboardউদাহরণ তৈরি করছি এবং instantiateViewControllerWithIdentifierএটিতে কল করছি।
স্টিফান আরামবাশিচ

15

স্টোরিবোর্ডটি আমি এতে যুক্ত হওয়া আরও কোনও UI জিনিসগুলি স্বীকৃতি দিচ্ছিল না। রান সময়ে সমস্ত রেফারেন্স শূন্য ছিল। সুতরাং আমি আমার উদ্ভূত ডেটা ফোল্ডারটি সাফ করেছি এবং তারপরে সেই সংযোগগুলি আবার কাজ করেছে।


2
এই উত্তর। আমি বিল্ড ফোল্ডার এবং সমস্ত কিছু পরিষ্কার করে বেশ কিছুক্ষণ এই লড়াই করেছি। আমার ক্ষেত্রে, viewDidLoad()সমস্ত সংযোগ তৈরি হয়েছিল, তবে viewWillAppear()প্রায় সবগুলিতে ছিল nil(কখনও কখনও এক বা দু'জন এখনও সংযুক্ত ছিল)। আমি সমস্ত কিছু চেষ্টা করেছিলাম এবং অবশেষে উদ্ভূত ডেটা ফোল্ডারটি মুছে ফেলেছি, পুনর্নির্মাণ করেছি এবং সবকিছু ঠিক আছে।
ruttopia

6
3 বছর পরেও, এক্সকোড 9.2 এ এখনও একই godশ্বর অভিশাপ বাগ রয়েছে। তোমাকে অনেক ধন্যবাদ.
কামাল ক্যাননাক

1
এটি এখনও
এক্সকোড

13

আমার কাস্টম সংগ্রহ ভিউ সেলটিটি আমার সাথে এটি ঘটছিল। দেখা যাচ্ছে আমাকে আমার রেজিস্টারক্লিসফরউইজআইডেন্টিফায়ার পদ্ধতিটি রেজিস্টারনিব দিয়ে প্রতিস্থাপন করতে হয়েছে। এটা আমার জন্য এটি স্থির।


তুমি ঠিক. আমি সুইট প্রোগ্রামিং ভাষায় এআরসি গণনা বিষয়বস্তুটি বিশদভাবে পড়েছি। আইবিআউটলেট দুর্বল সম্পত্তি এখনও কেন নিল আছে তার কারণ আমি খুঁজে পাচ্ছি না। শেষ অবধি, আমি '@ আইবিআউটলেট সুইফ্ট নীল' এর জন্য গুগল করছি এবং আপনার উত্তরটি এসও-তে পেয়েছি। তারপরে আমি এক্সকোড টেম্পলেটটি লাইনটি চিহ্নিত করে ভিউডিডডেডে 'সেলফ কোড্লেশনভিউ! .রেজিস্টারক্লাস' যুক্ত করেছি। তারপরে, এটি কাজ করে। আপনি আমার জীবন রক্ষা.
Charles.cc.hsu

12

এটি আমার জন্য ঘটেছিল কারণ আমি ঘটনাক্রমে আমার ভিউ কন্ট্রোলারটিকে স্টোরিবোর্ডের মাধ্যমে তা ইনস্ট্যান্ট করার পরিবর্তে সরাসরি ইনস্ট্যান্ট করছি। আপনি যদি সরাসরি এর মাধ্যমে ইনস্ট্যান্ট করেন MyViewController()তবে আউটলেটগুলি সংযুক্ত হবে না।


আপনি যদি XIB ফাইল ব্যবহার করেন তবে সরাসরি ইনস্ট্যান্টিয়েট এখনও সফলভাবে কাজ করে।
লুয়াট ভু দিনহ

11

আমার ক্ষেত্রে, এটি ঘটেছিল কারণ আমি loadViewআমার ভিউকন্ট্রোলার সাবক্লাসে পদ্ধতিটি ওভাররাইড করেছি, তবে যুক্ত করতে ভুলে গেছি[super loadView]

-(void)loadView {
// blank
}

আপনি যখন loadViewপদ্ধতিটি ওভাররাইড করবেন তখন আপনার সাবভিউগুলি শুরু করা আপনার দায়িত্ব। যেহেতু আপনি এটিকে ওভাররাইড করেন তাই ইন্টারফেস বিল্ডারের মতামতগুলি কোকো অবজেক্টে রূপান্তর করার সুযোগ পায় না এবং ফলস্বরূপ আউটলেটগুলি শূন্য থাকে।

আপনি যদি নিজের ভিউ কন্ট্রোলার সাবক্লাসে লোডভিউ প্রয়োগ করেন তবে স্টোরিবোর্ড / এক্সিব থেকে কোডে ইউআই উপাদানগুলি লোড করা আপনার দায়িত্ব হয়ে যায়।

বা শুধু কল

[super loadView];

যাতে সুপারক্লাস স্টোরিবোর্ড / xib কোডে লোড করার সুযোগ পায়।


8

controller.viewআইবিআউটলেটগুলি শুরু করার জন্য ভিউ লোড করার জন্য আপনি জোর করে কল করতে পারেন , তারপরে আপনি মানগুলি নির্ধারণ করতে সক্ষম হবেন।

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
    if (segue.identifier == "identifier") {
        let controller = segue.destinationViewController as! YourController
        let _ = controller.view //force to load the view to initialize the IBOutlets

        controller.your_IBOutlet_property = xxx
        ...
        controller.delegate = self
    }
}

7

আপনি view controllerপ্রোগ্রামগত মাধ্যমে ইনস্ট্যান্টিয়েট যদি । তারপরে নীচের মত এটি তৈরি করার চেষ্টা করুন

let initialVC = self.storyboard?.instantiateViewController(withIdentifier: "InitialVC") as! InitialVC

পরিবর্তে সরাসরি

let initialVC = InitialVC()

এটি আমার পক্ষে কাজ করেছে।


6

আমার জন্য, এটি ঘটল যখন আমি ঘটনাক্রমে আমার ভিউ নিয়ন্ত্রকের শ্রেণি হিসাবে ঘোষণা করি

class XYZViewController: UINavigationController {
}

(যেমন একটি হিসাবে UINavigationControllerনা UIViewController)।

Xcode এই ভুল উপর যেমন ওভাররাইড ফাংশন কুড়ান না, বর্গ বিল্ড জরিমানা বলে মনে হয়, এবং viewDidLoad, viewWillAppearইত্যাদি সব কাজ সঠিকভাবে। তবে এসগুলির IBOutletকোনওটিরই সংযোগ নেই।

ঘোষণাটি পরিবর্তন করা হচ্ছে

class XYZViewController: UIViewController {
}

এটি সম্পূর্ণরূপে স্থির।


5

আমি সম্প্রতি এই সমস্যা সম্মুখীন! এই আমার চিন্তা। সমস্যাটি আপনার স্টোরিবোর্ড বা কোনও লিঙ্ক ইস্যু নিয়ে নয়। আপনি কীভাবে আপনার ভিউকন্ট্রোলারটি শুরু করেন সে সম্পর্কে এটি। বিশেষত আপনি যখন সুইফ্ট ব্যবহার করছেন ((আপনি যখন ক্লাস ফাইল তৈরি করবেন তখন সম্পাদকের মধ্যে খুব কমই থাকে)

কেবল init()সুপার ক্লাস থেকে ব্যবহার করে আপনি স্টোরি বোর্ডের সাথে কাজ করে এমন কিছু শুরু করতে পারেন না। সুতরাং আপনাকে যা করতে হবে তা হল ভিউকন্ট্রোলারের সূচনা পরিবর্তন করা। প্রতিস্থাপন let XXViewController = XXViewController() দ্বারা let XXViewController = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle()).instantiateViewControllerWithIdentifier("XXViewController") as! XXViewController এই সব XXViewController এবং প্রারম্ভিক এটি স্টোরিবোর্ড যেতে প্রোগ্রাম বলে IBOutletআপনার স্টোরিবোর্ড হবে।

আশা করি এই সহায়তা ~ জিএল


সমস্যাটি ছিল না
স্টেফান আরামবাশিচ

4

2019, এই হরিবল সমস্যাটির জন্য একটি সম্ভাবনা:

  • বলুন আপনার কাছে সম্ভবত একটি ধারক ভিউ রয়েছে যা কিছু ধরণের ঘড়ি দেখায়। সুতরাং তোমার আছে

    ক্লাস ক্লক: ইউআইভিউকন্ট্রোলার

আপনি এটি অ্যাপ্লিকেশনটিতে বেশ কয়েকটি স্থানে ব্যবহার করেন

মূল স্ক্রিনে, বিশদ স্ক্রিনে, সম্পাদনা স্ক্রিনে।

আপনার কাছে একটি স্নাপচ্যাটের মতো আধুনিক অ্যাপ্লিকেশন রয়েছে।

আসলে, Clockআসলে লোড করা যেতে পারে একাধিকবারএকই সময় কোথাও একই পর্দায় । (সম্ভবত এটি কিছু ক্ষেত্রে লুকিয়ে রয়েছে))

আপনি Clockআপনার অনেক স্টোরিবোর্ডের একটিতে একটি উদাহরণে কাজ শুরু করেন ।

স্টোরিবোর্ডে আপনি একটি লেবেল যুক্ত করেন, নতুন লেবেল।

স্বাভাবিকভাবেই আপনি কোডটিতে আউটলেট যুক্ত করুন। সবকিছু কাজ করা উচিত। অন্যান্য সমস্ত আউটলেট নিখুঁতভাবে কাজ করে।

আপনি অবশ্যই আউটলেটটি সংযুক্ত করেছেন।

তবে অ্যাপটি শূন্য হিসাবে নিউ লেবেলের সাথে ক্র্যাশ হয়ে গেছে

এক্সকোড পরিষ্কারভাবে আপনাকে বলেছে "আপনি আউটলেট সংযোগ করতে ভুলে গেছেন"।

কারণটি হ'ল .......... আপনি ক্লকটির কেবল একটি স্টোরিবোর্ড ব্যবহার করে "নিউ লেবেল" রেখেছেন !

ক্র্যাশটি আসলে >>> অন্য কোনও স্থানের <<<< আপনি ঘড়ি ব্যবহার করছেন !!!!

এক্সকোড আপনাকে জানায় না যে ক্র্যাশটি পুরোপুরি অন্য কোনও জায়গা থেকে হয়েছে , আপনি যেখানে কাজ করছেন সেখান থেকে নয় !

ক্র্যাশটি আসলে আপনি যে জায়গাতে কাজ করছেন তা নয় - এটি অন্য স্টোরিবোর্ডের, যেখানে সেই স্টোরিবোর্ডে কোনও "নিউ লেবেল" আইটেম নেই!

হতাশাজনক।



2

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


2

আমার ক্ষেত্রে, অ্যাপটি হঠাৎ করে ক্রাশ শুরু করে। ডিবাগ এটা জানা যায় যে সব কারেন্টের এখনও nilসময় viewDidLoad()

আমার অ্যাপ্লিকেশনটি এখনও বেশিরভাগ দেখার নিয়ামকদের জন্য নিবস (স্টোরিবোর্ড নয়) ব্যবহার করে। সবকিছু ঠিক জায়গায় ছিল, সমস্ত আউটলেটগুলি সঠিকভাবে তারযুক্ত ছিল। আমি ডাবল চেক করেছি।

আমরা সাধারণত আমাদের ভিউ নিয়ন্ত্রকদের হিসাবে তাত্ক্ষণিকভাবে চিহ্নিত করি

let newVC = MYCustomViewController()

... যা কোনও কারণ হিসাবে দেখা যায় যতক্ষণ না। xib ভিউ কন্ট্রোলার ক্লাস হিসাবে একই নামকরণ করা হয়েছে (যদিও এটি কীভাবে কাজ করে তা নিশ্চিত নয়) আমরা নীল যুক্তি দিয়ে কল করছি নাinit(nibName:bundle:) , বা init()এটি selfপছন্দ করতে ওভাররাইড করছি না সাধারণত পরামর্শ দেওয়া হয় ...)।

তাই আমি স্পষ্টভাবে কল করার চেষ্টা করেছি

 let newVC = MYCustomViewController(nibName: "MYCustomViewController", bundle: .main)

... কেবল রানটাইম ব্যতিক্রম ত্রুটি দিয়ে অভ্যর্থনা জানাতে হবে:

*** অপ্রত্যাশিত ব্যতিক্রম 'এনএসআইটার্নাল ইনসেকশনসিটি এক্সপশন' এর কারণে অ্যাপ্লিকেশনটি সমাপ্ত করা হচ্ছে, কারণ: 'বান্ডলে এনআইবি লোড করা যায়নি:' এনএসবান্ডেল </ ব্যবহারকারী / নিকোলাসমারি / লাইব্রেরি / বিকাশকারী / কোরসিমুলেটর / ডিভাইসস / 3 ডি এ 3 সিএফ 21-108D-498F-9649-C4FC933 / কনটেইনারস / বান্ডেল / অ্যাপ্লিকেশন / C543DDC1-AE86-4D29-988C-9CCE89E23543/Myapp.app> (লোডড) 'এমওয়াই কাস্টমভিউকন্ট্রোলার' নামের সাথে

এবং তারপরে , আমি এটি দেখেছি:

.Xib ফাইলটির "টার্গেট সদস্যতা" চেকবক্সটি চেক করা হয়নি।


এক্সকোড প্রকল্প ফাইল সম্পর্কিত ঘন ঘন একত্রিত হওয়া দ্বন্দ্বগুলির সমাধান করার সময় অবশ্যই ঘটেছে।

অ্যাপলকে অবশ্যই একটি প্রকল্প ফাইল ফর্ম্যাট নিয়ে আসতে হবে যা আরও বেশি এসসিএম-বান্ধব।


2

স্টোরবোর্ড ছাড়াই XIB থেকে ভিউকন্ট্রোলার তৈরি করার জন্য 100% কার্যক্ষম সমাধান

  1. শ্রেণি কাস্টমভিউ কনট্রোলার তৈরি করুন: ইউআইভিউকন্ট্রোলার
  2. কাস্টমভিউকন্ট্রোলারভিউ.এক্সিব দেখুন তৈরি করুন
  3. ইন্টারফেস বিল্ডারে কাস্টমভিউকন্ট্রোলারভিউ.সিবিবে স্থানধারক -> ফাইলের মালিক নির্বাচন করুন
  4. "অ্যাট্রিবিউটস ইন্সপেক্টর" তে কাস্টমভিউকন্ট্রোলারে ক্লাস সেট করে
  5. "সংযোগ পরিদর্শকগুলিতে" এক্সবিটির শীর্ষ পর্যায়ের ভিউতে "ভিউ" সংযুক্ত করুন (নিশ্চিত করুন শীর্ষ স্তরের দর্শনের শ্রেণি কাস্টমভিউকন্ট্রোলারের দিকে নির্দেশ করছে না)
  6. "সংযোগ পরিদর্শক" এ অন্যান্য আউটলেটগুলি সংযুক্ত করুন (যদি প্রয়োজন / উপস্থিত থাকে)
  7. প্যারেন্ট ভিউ কন্ট্রোলার / অ্যাপের প্রতিনিধিতে কাস্টমভিউকন্ট্রোলারের একটি উদাহরণ তৈরি করুন

7.1।

// creating instance
let controller = CustomViewController()

7.2।

// connecting view/xib with controller instance
let bundle = Bundle(for: type(of: controller))
bundle.loadNibNamed("CustomViewControllerView", owner: controller, options: nil)

7.3।

// get/set outlets
controller.labelOutlet.text = "title"
controller.imageOutlet.image = UIImage(named: "image1")

চমত্কার উত্তর, ধন্যবাদ! এর মূল্য কী তা জন্য আপনি কাস্টমভিউ নিয়ন্ত্রণকারী শ্রেণিতে সরাসরি step.২ টি ওভাররাইড init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?)এবং কল করতে পারেন self
ব্র্যান্ডস্ক্রিপ্ট

1

আপনার আইবিআউটলেট সংযোগটি যদি ফাইলের মালিক বা দর্শনের সাথে সংযুক্ত থাকে তবে তা পরীক্ষা করে দেখুন। ভুল হতে পারে।


1

অন্যান্য ক্ষেত্রে:

আপনার নিয়ন্ত্রকের দর্শনটি প্রকৃতপক্ষে তাত্ক্ষণিক না হওয়া পর্যন্ত আপনার আউটলেটগুলি সেট হবে না, যা আপনার ক্ষেত্রে সম্ভবত initWithNibName এর পরে ঘটছে: বান্ডিল: pointএই বিন্দুতে তারা এখনও শূন্য থাকবে। সেই আউটলেটগুলির সাথে জড়িত যে কোনও সেটআপ আপনার ভিউ কন্ট্রোলারের -দ্বিতীয়মডিডলড পদ্ধতিতে হওয়া উচিত।


1

আমার জন্য, আমি স্থানীয় স্টোরিবোর্ডে একই ত্রুটি ছিল, একটি উপাদান কিছু লোকলে যুক্ত হয়েছিল এবং অন্যটিতে ছিল না, তাই আমি অনুপস্থিত উপাদানটির লোকালে স্যুইচ করার সময় সেই উপাদানটির নাল রেফারেন্স পেয়েছিলাম, আমাকে (রিডানডেন্ট) স্থানীয়করণের জন্য সরিয়ে ফেলতে হয়েছিল https://stackoverflow.com/a/42256341/1356559 ব্যবহার করে সেই স্টোরিবোর্ড ।


1

আমার জন্য, এটি ক্র্যাশ containerViewছিল কারণ শূন্য ছিল।

ক্র্যাশ সহ আমার কোড এখানে ।

@IBOutlet private var containerView: UIView!  // Connected to Storyboard
override open func loadView() {
    containerView.addSubview(anotherView)
}

নিখোঁজ জিনিসটি ফোন করছিল super.loadView()। সুতরাং এটি আমার জন্য সমস্যার সমাধান যোগ।

স্থির কোড :

@IBOutlet private var containerView: UIView!
override open func loadView() {
    super.loadView()
    containerView.addSubview(anotherView)
}

আপনি কখনই লোডভিউ () সরাসরি ( ডেভেলপার। অ্যাপ্লিকেশন / ডকুমেন্টেশন / ইউইকিট / ইউভিউকন্ট্রোলার / কল) কল করবেন না, পরিবর্তে স্ব.উইউভিউকে কল করুন
লিও

1

আমি ইতিপূর্বে স্টোরিবোর্ডে শনাক্তকারীকে সংজ্ঞায়িত করার পরে আমি কাস্টম সেলটির জন্য রেজিস্টার (_: forCellReuseIdentifier :) যুক্ত করার পরেও আমার অনুরূপ সমস্যা হয়েছিল। ভিউডিডডলড () ফাংশনে এই কোডটি ছিল। একবার আমি এটি সরিয়ে ফেললাম, এটি ভাল কাজ করেছে।


1

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

একবার আমি এটি ধরলাম এবং ফাইলের নামগুলি বর্গের নামটি প্রতিবিম্বিত করিয়ে দিলে, এটি সমস্ত ভাল ছিল!

আমি আশা করি যে কাউকে সাহায্য করবে


1

আরও একটি পেয়েছি ...

আপনার যদি কোনও ইউআইটিএবলভিউসিলের জন্য কাস্টম ক্লাস থাকে তবে কক্ষের স্টাইলে কাস্টম নির্দিষ্ট করতে ভুলবেন না।


1

ভিউটি লোড হলে আপনি যাচাই করতে পারেন।

if isViewLoaded && view.window != nil {
 //self.annotationOptionsView.
}

0
  1. উভয়ই নির্বাচন করুন .hএবং .mকন্ট্রোলার ফাইলগুলি দেখুন
  2. এই ফাইলগুলির রেফারেন্স অপসারণ করুন
  3. আপনার প্রকল্পের ট্রিটিতে ফাইলগুলি পুনরায় যুক্ত করুন
  4. স্টোরিবোর্ডটি খুলুন, শেষ পর্যন্ত প্রকল্পটি পুনরায় তৈরি করুন

0

দুর্ভাগ্যক্রমে আমি আমার ভিউ কন্ট্রোলারের AVPlayerViewControllerপরিবর্তে সাবক্লাস করেছি UIViewController। এটিকে UIViewControllerপুনরায় খেলতে সাধারণ জিনিস। এটি সাহায্য করা উচিত।

বিল্ড ক্লিনিং নেই (সাধারণ এবং পূর্ণ), প্রাপ্ত ডেটা ফোল্ডারগুলি সরিয়ে এবং Xcode ছাড়াই আমার পক্ষে কাজ করে।


0

ক্লাসটি অনুলিপি করার পরে আমার একই সমস্যা হয়েছিল (একটি এক্সিবের সাথে যুক্ত) এটি অন্য ভিউকন্ট্রোলার ক্লাসের সাথে পুনরায় ব্যবহার করতে (স্টোরিবোর্ডের সাথে সংযুক্ত)। আমি অপসারণ করতে ভুলে গেছি

override var nibName

এবং

override var nibBundle

পদ্ধতি।

এগুলি সরানোর পরে, আমার আউটলেটগুলি কাজ শুরু করে।


0

আমি আপনাকে ব্যবহার দেখতে পাচ্ছি ViewController!? মধ্যে ViewControllerবর্গ আপনি আবশ্যক ব্যবহার -viewDidLoad, না -awakeFromNib , -awakeFromNibজন্য ব্যবহার UIViewবর্গ



0

যদি আপনার দুটি থাকে main.storyboardsএবং আপনি ভুলটির সাথে পরিবর্তন করে থাকেন তবে এটি ঘটতে পারে। আপনি যখন কোনও অনির্দিষ্ট থেকে কোনও আউটলেটকে সংযুক্ত করেন যে কোনও সময় এটি ঘটতে পারে storyboard

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.