ios - সুইফ্ট 5.0 কম্পাইলার সঙ্গে প্রক্সট 10.2-প্রোটোকল উত্তরাধিকার ইস্যু




swift xcode (2)

আমরা বর্তমান এক্সকোড সংস্করণ (10.2) সঙ্গে একটি বড় সমস্যা আছে।

নিচের স্বাক্ষর সহ একটি BasicViewController শ্রেণী রয়েছে:

class BasicViewController: UIViewController, UITableViewDataSource, UITableViewDelegate

তারপরে আমাদের আরেকটি শ্রেণি রয়েছে ExampleViewController: BasicViewController যার মধ্যে কিছু অতিরিক্ত যুক্তি রয়েছে।

এখন চতুর অংশ আসে...

আমরা বিভিন্ন সিমুলেটর এবং ডিভাইসগুলিতে অ্যাপ্লিকেশনটি তৈরি এবং চালাও এবং সবকিছু ঠিকভাবে কাজ করে। তারপর আমরা অ্যাপ্লিকেশন সংরক্ষণাগার এবং হঠাৎ didSelectRow আর বহিস্কার করা হয় না। প্রকল্পটির গভীর পরিচ্ছন্ন ও পরিচ্ছন্নতাটি আবার আমাদের সংরক্ষণাগারের প্রয়োজন ছাড়াই সমস্যাটি পুনরুত্পাদন করার অনুমতি দেয়।

এই ঘটতে পারে যখন আমি কোনো ক্ষেত্রে মনে করতে পারেন না। এবং এটি আরও খারাপ হয়ে যায় কারণ আমি UITableViewDelegate পদ্ধতিগুলির সাথে আরো অনুরূপ সমস্যা খুঁজে পেয়েছি যখন কেবলমাত্র সংরক্ষণাগার অ্যাপ্লিকেশানটি চলাকালীন শিশু শ্রেণিতে বলা হচ্ছে না। এটি সংরক্ষণ এবং জমা দেওয়ার সময় কিছু অপ্টিমাইজেশনগুলির সাথে একটি সমস্যা হতে পারে?

আমি সঠিকভাবে টেবিলে dataSource এবং delegate সেট করি তা যাচাই করি, টেবিলে কোন অঙ্গভঙ্গি dataSource নেই। অ্যাপ্লিকেশন দ্বিতীয় / তৃতীয় সময় চালানোর পরে একই যুক্তি ভাল কাজ করে, কিন্তু প্রকল্পের গভীর গভীরতার পর প্রথমবার ব্যর্থ হয়।

আমরা একটি পরীক্ষা করেছি এবং শিশু ক্লাসে UITableViewDataSource এবং UITableViewDelegate সেট করেছি এবং তারপরে এটি প্রতিবার প্রত্যাশিত হিসাবে কাজ করে। মনে হচ্ছে প্রোটোকল উত্তরাধিকারসূত্রে ভাল কাজ করে না। যদি আমরা পিতামাতার মধ্যে প্রোটোকলগুলি রাখি এবং শিশু বর্গের সাথে যুক্ত করি, তাহলে এটি বলছে যে শিশুশ্রেণির প্রোটোকলগুলি অকার্যকর।

কেউ কি অনুরূপ কিছু অভিজ্ঞতা আছে? কোন পরামর্শ স্বাগত জানাই।


আপনি dataSource এবং ক্লাস ব্যবহার করে উভয় পাশে dataSource সংযুক্ত dataSource এবং delegate সংযুক্ত করতে পারেন, কারণ একবার আমার কাছে টেবিলেভিউয়ের একই সমস্যা ছিল এবং এটি ক্লাসে থাকার কারণে আমি সম্পন্ন হলাম না

self.tableView.delegate = self
self.tableView.datasource = self

আমি মনে করি তুমি এভাবে কাজ করছ না।

আমি জানি উভয় শৈলী ব্যবহার করা প্রয়োজন নয় তবে কিছু সময়ের জন্য এটি দরকার। এই উত্তরটি দেখুন https://.com/a/39443079/3485420


আপনি সুইফ্ট 5.0 কম্পাইলারে https://bugs.swift.org/browse/SR-10257 এ চলমান হতে পারেন। যদি কমপক্ষে তিনটি ফাইল থাকে তবে এটি হবে:

  1. BasicViewController.swift
  2. SomeOtherFile.swift
  3. ExampleViewController.swift

SomeOtherFile.swift AnyObject -Type মান থেকে কোনও কল করে, আপনি wholemodule মোডে কম্পাইল করছেন এবং ফাইলগুলি উপরের SomeOtherFile.swift কম্পাইলারের কাছে প্রেরিত হয় (দুইটি মধ্যবর্তী SomeOtherFile.swift সহ), তবে মনে হয় যে কম্পাইলার func tableView(_:, didSelectRowAt:) বাস্তবায়ন জন্য @objc সঠিকভাবে @objc করতে ব্যর্থ হয়। দেখুন func tableView(_:, didSelectRowAt:) । আপনি এখন @objc জন্য @objc সাথে স্পষ্টভাবে ট্যাগ করে এটির চারপাশে কাজ করতে পারেন।





protocols