ইউআইসি কলিকেশনভিউসেলের আউটলেট শূন্য কেন?


143

আমি ইন্টারফেস বিল্ডারে একটি কাস্টম ইউআইকোলিকেশনভিউসেল তৈরি করেছি, ক্লাসে এর উপর দৃশ্যের সাথে বাইন্ড বেঁধে রেখেছি এবং তারপরে যখন আমি স্ট্রিংয়ের উপর লেবেলে একটি স্ট্রিং ব্যবহার করতে এবং সেট করতে চাই, তখন লে লেবেলের নীল মান থাকে।

override func viewDidLoad() {
    super.viewDidLoad()

    // Register cell classes
    self.collectionView.registerClass(LeftMenuCollectionViewCell.self, forCellWithReuseIdentifier: "ls")
}

override func collectionView(collectionView: UICollectionView!, cellForItemAtIndexPath indexPath: NSIndexPath!) -> UICollectionViewCell! {

    var cell: LeftMenuCollectionViewCell
    cell = collectionView.dequeueReusableCellWithReuseIdentifier("ls", forIndexPath: indexPath) as LeftMenuCollectionViewCell
    println(cell.label) // <- this is nil, why??
    cell.label.text = "asd"

    return cell
}

এবং সাবক্ল্যাসড সেল:

class LeftMenuCollectionViewCell: UICollectionViewCell {

    @IBOutlet weak var imageView: UIImageView!
    @IBOutlet weak var label: UILabel!
    @IBOutlet weak var activityIndicatorView: UIActivityIndicatorView!
}

আপনি স্পষ্টত "ব্যবহার করছেন" এর কোনও কারণ আছে? সর্বত্র নাম লেখার পাশাপাশি? অপ্রয়োজনীয় বলে মনে হচ্ছে, আইবিআউটলেটগুলিতে। এটি কেবলমাত্র জায়গাটিই গুরুত্বপূর্ণ যেখানে আপনি সেলটি বামদেনু কলিকেশনভিউসেল হিসাবে সাদৃশ্যযুক্ত, কিন্তু আপনি এটি সেখানে করেন না .. আপনি নিজেই প্রিন্টলন বা এনএসএলগ 'সেল' করতে পারবেন?
mc01

1
আমি যদি সরিয়ে দিই "!" বা "ব্যবহার করবেন?" ক্লাস সংজ্ঞায়, আমি সংকলক ত্রুটি বা ক্রাশ পেয়েছি। "!" যখন আপনি এটি বেঁধে রাখেন তখন ডিফল্ট।
জানস

সেলটি নিজেই পিপীলিকা: <xxx. লেফটমেনু কালেকশনভিউসেল: 0x7aa7b320; বেসক্লাস = ইউআইকোলিকেশনভিউসেল; ফ্রেম = (0 0; 180 50); স্তর = <ক্যালায়ার: 0x7aa6f810 >>
জ্যানোস

সব আউটলেট আইবিতে জড়িত? অন্যান্য আউটলেটগুলি কি কাজ করে? আর কোন সুস্পষ্ট সমস্যা দেখবেন না, দুঃখিত।
mc01

উত্তর:


310

আমি self.collectionView.registerClass(LeftMenuCollectionViewCell.self, forCellWithReuseIdentifier: "ls")আবার ফোন করছি । আপনি যদি স্টোরিবোর্ড ব্যবহার করেন তবে আপনি এটিকে কল করতে চান না । এটি আপনার স্টোরিবোর্ডে যা আছে তা ওভাররাইট করে দেবে।

আপনি যদি এখনও সমস্যা চেক খাসি যদি reuseIdentifierহয় একই মধ্যে dequeueReusableCellWithReuseIdentifier এবং মধ্যে storyboard


18
ধন্যবাদ! একটি কাস্টম সেল ব্যবহার করায় এটিতে এক ঘণ্টারও বেশি সময় ব্যয় করল।
ডগকফি

আমার একই সমস্যা আছে তবে কোডের এই লাইনটি কখনই ব্যবহার করা হয়নি, কেন আপনি একই ধারণা পেতে পারেন কেন আমি একই ব্যতিক্রম পাই?
ডেকেল মামান

ধন্যবাদ। এটা আমার জন্য এটি সমাধান। আমার একটি স্টোরিবোর্ড ছিল এবং আমি ম্যানুয়ালি একটি ভিউ কন্ট্রোলার যুক্ত করেছি। বয়লারপ্লেট কোডটিতে আপনার উল্লিখিত লাইনটি অন্তর্ভুক্ত রয়েছে। যদিও এটি সঠিক বলে মনে হয়েছিল (সঠিক শনাক্তকারী এবং শ্রেণি) এটি আউটলেটগুলিতে সংযোগ দিতে অস্বীকার করেছিল। এখন এটা কাজ করছে. মিষ্টি!
জরিস ওয়েমার

13
আপনি যদি স্টোরিবোর্ড ব্যবহার করেন তবে আপনি এটিকে কল করতে চান না। এটি আপনার স্টোরিবোর্ডে যা আছে তা ওভাররাইট করে দেবে। <- এটি সত্যিই আমাকে সাহায্য করবে
স্যুট এ.সুক

6
জিএএএইচ, ইউআইকোলিকেশনভিউকন্ট্রোলার টেম্পলেটটিতে কী কী ভয়ঙ্কর জিনিস আছে !!!!! ধন্যবাদ, জ্যানোস
কেনি ওয়াইল্যান্ড

53

কেবল এই লাইনটি সরিয়ে দিন:

self.collectionView.registerClass(LeftMenuCollectionViewCell.self, forCellWithReuseIdentifier: "ls")

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

1
এটি সঠিক উত্তর এবং প্রশ্নটি জিজ্ঞাসা করা ব্যক্তির দ্বারা সেই অনুযায়ী চিহ্নিত করা উচিত। এটি কেন কাজ করে তা বুঝতেও দুর্দান্ত হবে :)
কিকো লোবো

3
অনুমান করুন যে এটিকে নিম্নমানের করা হয়েছিল কারণ আগস্ট -১৪ এ প্রশ্নের উত্তর দেওয়া হয়েছিল ... যদিও এই উত্তরটি বেশ কয়েক মাস পরে আবার উত্তরটি এখানে অনুলিপি করেছে।
নিতিন নাইন

1
তবে আমি যখন এটি ব্যবহার করি না, এটি আমাকে ত্রুটি হিসাবে ব্যর্থতা দেয় - [ইউআইসকলিকেশন ভিউ _ডেকিউ রিজ্যুয়েবল ভিউ অফফাইন্ড: উইন্ড ইন্টিফেসিফার: ফর ইনডেক্সপথ: ভিউ ক্যাটাগরি:]
শাহিরা

কেন এই লাইনের প্রয়োজন নেই তার একটি ব্যাখ্যা স্বাগত হবে। এটি বর্তমানে একটি নতুন সংগ্রহ দর্শনের জন্য এক্সকোড বয়লারপ্লেট দ্বারা যুক্ত করা হয়েছে।
pkamb

47

আপনি যদি xib ব্যবহার করছেন তবে নিশ্চিত হয়ে নিন যে আপনি কোডটি এই লাইনটি আপনার ভিউডিজোডে যুক্ত করেছেন।

উদ্দেশ্য গ:

[self.collectionView registerNib:[UINib nibWithNibName:@"MyCell" bundle:nil] forCellWithReuseIdentifier:@"MyCellIdentifier"];

সুইফট:

collectionView.register(UINib(nibName:"MyCell", bundle: nil), forCellWithReuseIdentifier:"MyCellIdentifier")

আপনার কি ক্লাস এবং নিব উভয়ই রেজিস্ট্রেশন করতে হবে, বা কেবল নিবই যথেষ্ট?
রেইনকাস্ট

3
আমি কেবল নিবটি নিবন্ধভুক্ত করেছি এবং এটি আমার সমস্যার সমাধান করেছে।
এমেলিয়া

দেখে মনে হচ্ছে নিবন্ধ করার দুটি উপায় আছে এবং আমি ভুলটি ব্যবহার করছিলাম ... সংগ্রহের দৃশ্য? forCellWithReuseIdentifier: "yourIdentifier")
সেরজিও

17

ছেলেদের নিব রেজিস্ট্রেশন করতে হবে!

collectionView.register(UINib(nibName: "CustomCell", bundle: nil), forCellWithReuseIdentifier: "CustomCellId")

6

দেখে মনে হচ্ছে নিবন্ধ করার দুটি উপায় আছে এবং আমি প্রথমে ভুলটি ব্যবহার করছি। আমি একটি কাস্টম এক্সিব ভিউ পেয়েছি যাতে দ্বিতীয় বিকল্পটির সাথে নিবন্ধিত হয়, এবং আমাদের ডেটা রয়েছে!

1:

collectionView?.register(YourItemClassName.self, forCellWithReuseIdentifier: "yourIdentifier") 

2:

collectionView?.register(UINib(nibName: "YourItemClassName", bundle: nil), forCellWithReuseIdentifier: "yourIdentifier")

0

আমারও একই সমস্যা ছিল, তবে আমার ভুলটি হ'ল আমি লেবেল পাঠ্যটি পরিবর্তন করতে সক্ষম হতে কালেকশনভিউসেলকে উপস্থাপন করি নি ..


0

আমি মনে করি যে সর্বোত্তম সমাধান হ'ল স্টোরিবোর্ড থেকে সরাসরি ব্যবহার করা যেখানে একটি যুক্ত করা হয় CollectionView, বিকল্পে আপনাকে CollectionViewCellআপনার CollectionViewস্টোরবোর্ড থেকে একটি সরিয়ে ফেলতে হবে এবং নিম্নলিখিত কমান্ডের সাথে একটি ঘর নিবন্ধিত করতে হবে:

কালচারভিউ?। রেজিস্টার (ইউআইএনআইবি (নিবনেম: "আপনার আইটেম ক্লাসনাম", বান্ডেল: শূন্য)) জন্য, সেল উইথআরউইসআইডেন্টিফায়ার: "আপনারআইডেন্টিফায়ার")

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