রানটাইমের সময় "ইন্টারফেস বিল্ডার ফাইলে অজানা শ্রেণি << ক্লাস>" ত্রুটি


260

যদিও ইন্টারফেস বিল্ডার এ সম্পর্কে সচেতন MyClass, অ্যাপ্লিকেশন শুরু করার সময় আমি একটি ত্রুটি পেয়েছি।

এটি যখন MyClassকোনও লাইব্রেরির অংশ হয় তখন ঘটে থাকে এবং আমি সরাসরি অ্যাপ্লিকেশন টার্গেটে ক্লাসটি সংকলন না করলে তা ঘটে না।


আপনি কিভাবে লাইব্রেরিতে লিঙ্ক করবেন?
এলিস ভ্যান লুইজ

আমি একটি নির্ভরশীল সাবপ্রজেক্ট ব্যবহার করি এবং আমার বর্তমান টার্গেটের "লিঙ্ক বাইনারি উইথ লাইব্রেরি" বিল্ড ফেজটিতে এক্সকোড সাবপ্রজেক্টের পণ্যগুলি থেকে একটি টানা 'ড্রপ' করেছি।
ঝুল ২

বর্গ CocoaPods থেকে থাকে, তাহলে এই সাহায্য করতে পারে github.com/CocoaPods/CocoaPods/issues/491
প্রোটোকল

সম্পর্কিত হতে পারে? stackoverflow.com/a/24924967/511299
Sunkas

উত্তর:


222

" ইন্টারফেস বিল্ডার ফাইলটিতে অজানা শ্রেণি মাইক্লাস। " ত্রুটি থাকা সত্ত্বেও, রানটাইম এ মুদ্রিত ত্রুটি থাকা সত্বেও , এই ইস্যুটির ইন্টারফেস বিল্ডারের সাথে কোনও সম্পর্ক নেই, বরং লিঙ্কারের সাথে, যা কোনও শ্রেণিতে লিঙ্ক করছে না কারণ কোনও কোডই সরাসরি এটি ব্যবহার করে না।

.Nib ডেটা (.xib থেকে সংকলিত) রানটাইমের সময় লোড করা হয়, MyClassস্ট্রিং ব্যবহার করে রেফারেন্স করা হয়, তবে লিঙ্কার কোড কার্যকারিতা বিশ্লেষণ করে না, কেবল কোড অস্তিত্ব, তাই এটি এটি জানে না। যেহেতু অন্য কোনও উত্স ফাইলগুলি এই শ্রেণীর রেফারেন্স দেয় না, এক্সিকিউটেবল করার সময় লিঙ্কার এটি অস্তিত্বের বাইরে থেকে অনুকূল করে তোলে। সুতরাং যখন অ্যাপলের কোড এই ধরণের ক্লাস লোড করার চেষ্টা করে তখন এটি এর সাথে যুক্ত কোডটি খুঁজে পায় না এবং সতর্কতাটি মুদ্রণ করে।

ডিফল্টরূপে, অবজেক্টিভ-সি টার্গেটগুলিতে -all_load -ObjCডিফল্ট অনুসারে পতাকা সেট করা থাকে, যা সমস্ত চিহ্নকে রাখে। তবে আমি একটি সি ++ টার্গেট দিয়ে শুরু করেছি, এবং এটি ছিল না। তবুও, আমি এর চারপাশে একটি উপায় পেয়েছি, যা লিঙ্কারটিকে আক্রমণাত্মক রাখে।

আমি যে হ্যাকটি মূলত ব্যবহার করছিলাম তা হ'ল একটি খালি স্ট্যাটিক রুটিন যুক্ত করা:

+(void)_keepAtLinkTime;

যা কিছুই করে না, তবে আমি একবার ফোন করব যেমন:

int main( int argc, char** argv )
{
   [MyClass _keepAtLinkTime];
   // Your code.
}

এটি লিঙ্কারটিকে পুরো ক্লাস রাখতে বাধ্য করবে এবং ত্রুটিটি অদৃশ্য হয়ে যাবে।

যেমন jlstrecker মন্তব্যগুলিতে উল্লেখ করেছেন, আমাদের আসলে কোনও _keepAtLinkTimeপদ্ধতি যুক্ত করার দরকার নেই । কেবল একটি বিদ্যমানকে কল করা, যেমন:

   [MyClass class];

কৌতুকটি করে (যতক্ষণ আপনি একটি থেকে উদ্ভূত হন NSObject)

অবশ্যই, আপনি আপনার কোডের যে কোনও স্থানে এটি কল করতে পারেন। আমার ধারণা এটি এমনকি অ্যাক্সেসযোগ্য কোডেও হতে পারে। ধারণাটি হ'ল লিঙ্কারটিকে এমন MyClassকোথাও ব্যবহার করা হয় যাতে এটির অপ্টিমাইজ করার ক্ষেত্রে এত আক্রমণাত্মক না হয় thinking

এক্সকোড 6.3.2 এবং সুইফট 1.2

দ্রুত সংজ্ঞা দেখুন। ওভাররাইড করতে ভুলবেন না init(coder aDecoder: NSCoder)। উদ্দেশ্য নিয়ামক এর উদ্দেশ্য- সি সংজ্ঞা। এবং, একটি নাশপাতি গাছে একটি নিব।

আপনি যেখানে আপনার ক্লাসটি বেছে নেবেন সেখানে নিব বিশদ পরিদর্শকের মডিউল নাম যুক্ত করুন।


2
.Xib ডেটা রানটাইমের সময় লোড হয় না। আইবি সংকলক একটি কীবোর্ডকে xib সংকলন করে; নিব যা রানটাইমে লোড হয়।
পিটার হোসি

19
আপনাকে সংশোধন করতে হবে না MyClass। শুধু একটি পদ্ধতি তা থেকে উত্তরাধিকারী কল NSObjectমত +class
jlstrecker

10
মূল প্রশ্নটি পোস্ট করার সময় এটি কোনও এক্সকোড 4 না হলেও নিম্নলিখিতটি এখনও যথাযথ বলে মনে হচ্ছে। এক্সকোড 4 এ ত্রুটিটি দূর করার জন্য কিছু ডামি পদ্ধতি যুক্ত করার পরিবর্তে, আপনি MyClass.mফাইল পরিদর্শকের টার্গেট সদস্যতা বিভাগের সমস্ত প্রয়োজনীয় লক্ষ্যগুলি পরীক্ষা করতে পারেন ।
অ্যাডব্বার

51
আজকাল আর একটি সম্ভাবনা হ'ল মাইক্লাস.এম আপনার সংকলন উত্স তৈরির পর্যায়ে নাও থাকতে পারে। আপনি যদি নতুন প্রকল্প ব্যবহার না করে মাই ক্লাস এইচ / এমটিকে আপনার প্রকল্পে টেনে আনেন তবে এটি ঘটতে পারে।
স্টিভেন ফিশার 0

6
@ জোশব্রুস আপনি কী সুইফট সমাধানটি ব্যাখ্যা করতে পারবেন? আমি সত্যিই এটি বুঝতে পারি না।
রায়ান বোব্রোস্কি

183

লরার পরামর্শ অনুসারে আমি এটি ঠিক করেছি তবে আমার ফাইলগুলি পুনরায় তৈরি করার দরকার নেই।

  • প্রজেক্ট ন্যাভিগেটরে এক্সকোড ৪ ব্যবহার করে, .m ফাইলটি নির্বাচন করুন যাতে এটির অভিযোগ রয়েছে এমন ক্লাসটি রয়েছে

  • দেখুন-> ইউটিলিটিস-> ফাইল ইন্সপেক্টর দেখান
    ( এটি .m-ফাইল তথ্য সহ ফাইল ইন্সপেক্টরটি ডানদিকে প্রদর্শিত হবে)

  • লক্ষ্য সদস্যপদ বিভাগটি খুলুন এবং নিশ্চিত করুন যে আপনার লক্ষ্যটি এই .m-ফাইলের জন্য নির্বাচিত হয়েছে

আমি যখন আমার প্রজেক্টে আমার .m ফাইল যুক্ত করেছি, এটি কোনও কারণে এটি আমার ডিফল্ট লক্ষ্যবস্তুতে যুক্ত হয়নি এবং এটি আপনাকে উল্লিখিত ত্রুটিটি পেয়েছিল।


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

5
আমার "টার্গেট সদস্যতা" চেকবক্সটি ইতিমধ্যে চেক করা হওয়ায় এই পরামর্শটি আমার পক্ষে কিছুটা আলাদাভাবে কাজ করেছে different আমি এটি পরীক্ষা না করে পুনর্নির্মিত করেছি, তবে তারপরে আমার নতুন শ্রেণীর নাম নির্দেশ করতে ত্রুটি বার্তাটি পরিবর্তিত হয়েছে। বাক্সটি পুনরায় চেক করুন এবং আবার বিল্ডিং, এখন সবকিছু কাজ করে। ক্যাশে ফাইল মোছার চেয়ে অনেক সহজ!
ইলেক্ট্রোম্যাগগট

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

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

1
আমি আমার প্রকল্প থেকে একটি ফাইল মুছলাম এবং পরে আবার একই ফাইলটি যুক্ত করেছি এবং এটি সমস্যার সমাধান করেছে।
MindSpiker

70

ইন্টারফেস বিল্ডারের সাথে এর আসলে কোনও সম্পর্ক নেই, এখানে যা ঘটছে তা হ'ল এক্সকোড দ্বারা প্রতীকগুলি আপনার স্থির লাইব্রেরি থেকে লোড করা হচ্ছে না। এই সমস্যাটি সমাধান করার জন্য আপনাকে প্রকল্প কী (এবং সম্ভবত লক্ষ্য) বিল্ড সেটিংস কীতে -all_load -ObjCপতাকা যুক্ত করতে হবে Other Linker Flags

যেহেতু অবজেক্টিভ-সি ক্লাসে কেবল একটি প্রতীক তৈরি করে, আমাদের অবশ্যই লিঙ্কারকে -ObjC পতাকা ব্যবহার করে ক্লাসের সদস্যদের লোড করতে বাধ্য করতে হবে, এবং আমাদের অবশ্যই আমাদের স্থির লাইব্রেরি থেকে -all_loadলিংক পতাকা যুক্ত করে আমাদের সমস্ত বস্তুর অন্তর্ভুক্তিকে জোর করতে হবে । আপনি যদি খুব শীঘ্রই এই পতাকাগুলি এড়িয়ে যান তবে আপনি ত্রুটিতে চলে যাবেন unrecognized selectorবা আপনি এখানে যেমন পর্যবেক্ষণ করেছেন তেমন অন্যান্য ব্যতিক্রমও পাবেন।


5
আমি দেখতে পেয়েছি যে কেবলমাত্র -ObjCপতাকাটি আমার ক্ষেত্রে এটি স্থির করেছে।
কেকোয়া

5
@ কেকোয়া এর কারণ আপনার উত্তরটি লেখার লোকটির চেয়ে এক্সকোডের (এলএলভিএম) সংস্করণটি সাম্প্রতিক। আজকাল, -ObjCসমস্যা সমাধানের জন্য ব্যবহার করা যথেষ্ট ভাল।
পর্যন্ত

এটি কেবল আমাকে সাহায্য করেছিল। সংকলনের সময় এটি প্রয়োজনীয় কাঠামো সম্পর্কিত সমস্যাগুলি দেখিয়েছিল যা আমি সমস্ত ফ্রেমওয়ার্কগুলি আমদানি করার পরেও সমাধান করে দিয়েছিলাম।
বৈভব শরণ

-ObjC পতাকা একা আমার সমস্যা স্থির করেছে। আইওএস 7-এ অল_লোড বৈশিষ্ট্যটি থাকার জন্য আমি আসলে ত্রুটি পেয়েছি।
সুষমা সতীশ

-All_load -ObjC ব্যবহারের ফলে পণ্যের আকার অপ্রয়োজনীয় বৃদ্ধি পেতে পারে। কেবল ফ্রেমওয়ার্কগুলিতে এই বিষয়গুলি বিভাগের ফাইলগুলির সাথে ঘটে।
আলী আমিন

26

আমি আজ সুইফট ব্যবহার করে এই সমস্যায় পড়েছি।

আমি একটি বর্গ পরিবর্তিত Model.h + Model.mএকটি থেকে Model.swift। এই অবজেক্টটি ইন্টারফেস বিল্ডারে এর সাথে ব্যবহৃত হয়েছিল class = Model

আমি অবজেক্টটি প্রতিস্থাপনের সাথে সাথে ক্লাস আর লোড করা যাবে না।

আমাকে যা করতে হয়েছিল তা হ'ল আইবিতে ক্লাসের রেফারেন্স পরিবর্তন করা:

Class = Model
Module = 

প্রতি

Class = Model
Module = <TARGETNAME>

আপনি <TARGETNAME>বিল্ড সেটিংসটিতে পাবেন। এটি আপনার নাম উত্পন্ন সুইফট-শিরোনামে প্রদর্শিত হবে:#import "TARGETNAME-Swift.h"


1
এটি সঠিক উত্তর বলে মনে হচ্ছে। কেউ অন্যথায় বলতে না পারলে এটিকে সঠিক হিসাবে চিহ্নিত করা উচিত।
বুজরান রুথবার্গ

1
দুর্দান্ত উত্তর ধন্যবাদ। আমার জন্য Moduleনামটি ঠিক সেখানেই ড্রপ ডাউনে ছিল। এটি আমার অ্যাপের নাম ছিল।
ক্রিসএইচ

এটা আমার জন্য কাজ করে. আমার সমস্যার জন্য, আপনার উত্তরে উল্লিখিত <TARGETNAME> হ'ল ফ্রেমওয়ার্কের নাম যা বর্গ রয়েছে।
টাইলার দীর্ঘ

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

অ্যাপডেলিগেটের জন্য, আমি ইন্টারফেস বিল্ডার ইউআইতে এটি ঠিক করতে সক্ষম হয়েছি। উইন্ডোর মধ্যে কোনও ইউআই উপাদানটির কাস্টম শ্রেণীর জন্য, ইন্টারফেস বিল্ডার ইউআই আমাকে কাস্টম ক্লাস এবং মডিউল সেট করতে দেয় না। আমাকে নিম্নলিখিতগুলি করতে হয়েছিল: (1) .xib ফাইলটিকে "উত্স কোড" হিসাবে খুলুন (এটিতে ডান ক্লিক করুন)। (২) কাস্টমক্লাস অ্যাট্রিবিউটের পাশে "কাস্টমমডিউল = <TARGETNAME>" বৈশিষ্ট্য যুক্ত করুন।
পৌলস্বো

20

"প্রকল্পের নাম" এ যান, এটিতে ক্লিক করুন, এবং তারপরে "বিল্ড পর্যায়সমূহ" ট্যাবটি যান, এবং তারপরে "সংকলন উত্স" এ ক্লিক করুন, এবং তারপরে "+" বোতামে ক্লিক করুন, একটি উইন্ডো আসবে, "মাইক্লাস" নির্বাচন করুন। এম "ফাইল এবং তারপরে" যুক্ত করুন "ক্লিক করুন,

প্রকল্পটি তৈরি করুন এবং এটি চালান, সমস্যাটি অবশ্যই সমাধান হয়ে যাবে


হ্যাঁ, আমি আমার নতুন আমদানি করা ক্লাসগুলিতে আমি যে টার্গেট বাক্সগুলি যুক্ত করতে চাইছিলাম তা সমস্ত পরীক্ষা করে দেখিনি। ধন্যবাদ!
জোয়েল বাল্মার

হ্যাঁ! টার্গেট প্রকল্প থেকে আমার ভিসি ফাইলটি অনুপস্থিত ছিল।
সেবাস্তিয়ান দ্বারনিক

19

এটি একটি এক্সকোড 4 ক্যাশে সমস্যা, কেবলমাত্র / ব্যবহারকারী / আপনার ব্যবহারকারী / গ্রন্থাগার / অ্যাপ্লিকেশন সহায়তা / আইফোন সিমুলেটর / 4.3 / অ্যাপ্লিকেশন / এর অধীনে সমস্ত ফোল্ডার মুছুন

এছাড়াও আপনার আইফোনে যদি একই সমস্যা পরীক্ষা করে থাকে তবে এটি চালানোর আগে পুরানো অ্যাপটিকে মুছুন ...

শুভকামনা। Pascual


8
প্রজেক্ট বিল্ড সেটিংসে আপনাকে "অন্যান্য লিঙ্কার পতাকা" কীতে "-all_load -ObjC" পতাকাগুলি যুক্ত করতে হবে। এটি কোনও এক্সকোড 4 নির্দিষ্ট সমস্যা নয় এবং আসলে ইন্টারফেস বিল্ডারের সাথে সাধারণত কোনও সম্পর্ক নেই nothing
আলাসডায়ার অ্যালান

এই সমাধানটি ইতিমধ্যে জানুয়ারী 2010-এ প্রস্তাব করা হয়েছিল (উপরে দেখুন)।
ঝুলে 21

6
হ্যাঁ - এটি করার সহজ
উপায়টি হ'ল

অথবা আপনি যা করতে পেরেছেন তা করতে পারেন এবং সিমুলেটর হোম স্ক্রীন থেকে প্রশ্নে থাকা অ্যাপটিকে মুছুন। আমার একই ত্রুটি বার্তা ছিল, তবে এটি পুরানো অ্যাপের প্রতিনিধিটিকে উল্লেখ করছে।
স্প্যান্টলে

16

কখনও কখনও আইবিল্ডার মিস customModule="AppName" customModuleProvider="target"

এটি ঠিক করতে, উত্স কোড হিসাবে স্টোরিবোর্ডটি খুলুন এবং এই লাইনটি প্রতিস্থাপন করুন:

<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass"
sceneMemberID="viewController">

এটি:

<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass"
 customModule="AppName" customModuleProvider="target" sceneMemberID="viewController">

এক্সকোড 6.3 (6D570) ব্যবহার করার সাথে সাথে আমি চালনার সাথে সাথে সেটিংসটি মূল (খারাপ) টিতে ফিরে আসে। বাগ? আমি একটি উদ্দেশ্য সি প্রকল্পে একটি সুইফ্ট ফাইল অন্তর্ভুক্ত করার চেষ্টা করছি।
addzo

এক্সকোড .4.৪ এ, স্টোরিবোর্ড উত্স কোডে কেবলমাত্র কাস্টমমডিউলপ্রাইডার = "লক্ষ্য" যুক্ত করে, পছন্দসই ভিউকন্ট্রোলারের অধীনে সমস্যাটি স্থির করে।
আম্রো শাফি 14

আমি আমার সমস্যাটি ন্যায়সঙ্গতভাবে সমাধান করতে সক্ষম হয়েছি customModule="MyFrameworkName"। বিশাল +10
স্টান

প্রকৃতপক্ষে, আমার সমস্যাটি বিপরীত ছিল, আমি কাস্টমটিজেটটি মুছতে চেয়েছিলাম কিন্তু এক্সকোডটি xib উত্স ফাইলটি পরিবর্তন করছে না, কাজেই এটি কাস্টমমোডুল = "অ্যাপনাম" কাস্টমমডিউলপ্রাইডার = "লক্ষ্য" মুছে ফেলতে হয়েছিল।
আদ্রিয়ানা

14

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

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


2
আমি কোকোপডস দ্বারা ইনস্টল করা সুইফট প্রকল্পের একটি সুইফট কাঠামো ব্যবহার করছি। এই পদ্ধতি কাজ করে। এবং মডিউল নাম ফ্রেমওয়ার্ক এর নাম।
JsW

1
এটি পুরোপুরি কাজ করে। কেন সেই মডিউলটি সরানো দরকার ??
iSrinivasan27

নিখুঁত উত্তরের জন্য cocoapod অবকাঠামো বিষয় নিয়ে নিখুঁত ... গৌরব কাজ করে আপনাকে ...
জয়ন্ত রাওয়াত

13

বিল্ড পর্যায়গুলি-> সংকলন উত্সগুলিতে যান এবং আপনার নতুন .m ফাইল যুক্ত করুন।


হ্যাঁ, পূর্বের প্রকল্প থেকে একটি এক্সকোড ৪.৪ প্রকল্পে নতুন ফাইল যুক্ত করার পরে .m ফাইলগুলি সংকলন উত্স তালিকায় যুক্ত করার পরে এটি নিশ্চিত হয়ে গেছে। "-All_load -ObjC" যুক্ত করা আমার ক্ষেত্রে কাজ করে না, যদিও আঘাত করে না।
কেন

13

আমার ক্ষেত্রে এটি এমন একটি শ্রেণীর জন্য ত্রুটি দেখিয়েছিল যা বিদ্যমান ছিল না! আমার সন্দেহ হয়েছিল যে এটি এমন কিছু যা স্টোরিবোর্ডের ফাইলটিতে বিরক্ত হয়েছিল। আপনি যদি ত্রুটি করে ক্লাস ফাইলটি না চিনেন তবে এটি চেষ্টা করুন:

1) আপনার প্রকল্পটি সূক্ষ্ম বা অন্য কোনও ভাল সম্পাদকে খুলুন। শ্রেণি উল্লেখ করা হচ্ছে জন্য অনুসন্ধান করুন। 2) পুরো বিট যে মুছে ফেলা হবে

customClass="UnrecognizedClassName"

3) এটি সংরক্ষণ করুন। 4) এক্সকোডে ফিরে আসুন এবং প্রকল্পটি পরিষ্কার করুন এবং এখনই এটি চালানোর চেষ্টা করুন।

আমার জন্য কাজ।

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


আমি ওএসএক্স টেক্সটএডিট অ্যাপ্লিকেশন ব্যবহার করি। এটি এই অপারেশনের জন্য দুর্দান্ত কাজ করেছে। আপনার প্রকল্পটি প্রথমে বন্ধ করে এবং এক্সকোডটি বন্ধ করে দেওয়ার বিষয়ে নিশ্চিত হন।
টিজে

এটিও সাহায্য করেছিল। একই কাস্টমক্লাসের সাথে আমার একাধিক অবজেক্ট ছিল, আমি সম্ভবত নিয়ামকের পরিবর্তে ভিউটি ক্লিক করে একই নাম নির্ধারণ করি।
ম্যাক-

1
এটি আমারও যে সমস্যার মুখোমুখি হয়েছিল তার সমাধান ছিল; আমি এর আগে একটি আংশিক শ্রেণীর নাম প্রবেশ করিয়েছিলাম এবং কোনওভাবে স্টোরিবোর্ডটি সেভাবে সংরক্ষণ করা হয়েছে (যেমন customClass="MyCla")। কাস্টম ক্লাস অ্যাসাইনমেন্টটি মোছার পরিবর্তে, আমি প্রথম শ্রেণিতে যে ক্লাসটি ব্যবহার করব তা কেবল আমার জন্য বুদ্ধিমান ছিল :)
ডেভ

9

আমি কেবল এই উত্তরটি যুক্ত করতে চাই কারণ এখানে সমস্ত উত্তর যদি ধরেই না নেওয়া হয় যে ক্লাসটি আসলেই আছে .. এটি কেবল ঠিক যে লিঙ্কার / সংকলকটি এটি দেখতে দেখতে খুব মূ is় .. সুতরাং উত্তরগুলি লিঙ্কারকে অস্তিত্বের দিকে সতর্ক করার সাথে সাথে ঘুরবে around ক্লাসের বা 'জোর' করার জন্য একটি হ্যাক তৈরি করার এটি বিদ্যমান ..

আমার সমস্যাটি ঘটে যখন এই বার্তাটি আসলে অস্তিত্বহীন শ্রেণীর কথা বলছে .. সুতরাং একটি উদাহরণ হ'ল আমি পুরানো গিট রিভিশনটিতে ফিরে যাচ্ছি যা একটি নির্দিষ্ট শ্রেণীর জ্ঞান নেই .. তবুও সংকলকটি অভিযোগ করেছে যে উল্লিখিত শ্রেণিটি না উপস্থিত নেই ..

সমাধান?

  • পুরো জিনিস নুকে ! এই ডিরেক্টরিতে সমস্ত লিখিত সামগ্রী মুছে ফেলে প্রথমে সমস্ত বিল্ড ফাইল ইত্যাদি মুছুন Library / গ্রন্থাগার / বিকাশকারী / এক্সকোড / ডেরিভডটা
  • ফোন থেকে নিজেই অ্যাপটি মুছুন (এবং আপনি যদি সিমুলেটর ব্যবহার করছেন তবে সিমুলেটর সামগ্রীগুলি সাফ করুন)

আপনি যে পরে যেতে ভাল করা উচিত


2
এটি যথেষ্টভাবে +1 করতে পারবেন না, আমার সমস্যাটি ঠিক করেছেন। আমার সমস্যাটি হুবহু একই ছিল যেখানে ফাইলটি ইতিমধ্যে মুছে ফেলা হয়েছে তখনও সংকলিত হওয়ার পরে সতর্কতাটি উপস্থিত ছিল।
ব্রেট

স্টোরিবোর্ডে আপনাকে আইডেন্টিফায়ারটি পূরণ করতে হবে। কখনও কখনও ভুল করে "ক্লাস" ফিল্ডে (পরিচয় পরিদর্শকটিতে) লিখি) তাই সংকলক ক্লাসের অস্তিত্বের কারণ নেই বলে অভিযোগ করছে!
ভিনসেন্ট

9

ত্রুটি অপসারণের সর্বোত্তম উপায় হ'ল: ১) শ্রেণীর ফাইল নির্বাচন করুন (। মি) 2) " টার্গেট সদস্যতা " এর অধীনে , প্রকল্পের নাম এন্ট্রি "পরীক্ষা করুন"


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

এটি আমার পক্ষে কাজ করে না। লক্ষ্য সদস্যতা সঠিক, কিন্তু ত্রুটি ঘটতে থাকে।
কোকোডোকো

8

আমি আমার ক্লাস। ও। মি থেকে পাঠ্যটি অনুলিপি করে, প্রকল্প থেকে সেই শ্রেণি ফাইলগুলি মুছে ফেলা এবং "ফাইল যুক্ত করুন" ব্যবহার করে একই ক্লাসের সাথে নতুন ক্লাস। এবং .m ফাইল তৈরি করে এটি ঠিক করেছি। তারপরে আমি নতুন ফাইলগুলিতে কোডটি পেস্ট করেছি এবং সবকিছু দুর্দান্ত কাজ করেছে। ফাইলগুলি তৈরি করার সময় কোনওভাবে সঠিকভাবে লিঙ্ক করা হয়নি। এর পরে আর কোনও লিঙ্কার পতাকা ব্যবহার করার দরকার নেই।


1
যখন আমি প্রথম ফাইলগুলি তৈরি করেছিলাম আমার শেষে .m ছিল না। আমি ফাইলটির নাম পরিবর্তন করে এটিকে আবার যুক্ত করার চেষ্টা করেছি, তবে এক্সকোড খুশি হওয়ার আগে আমাকে ফাইলটি মুছতে এবং পুনরায় তৈরি করতে হয়েছিল।
অষ্টম

আপনার ফাইলটি সম্ভবত আপনার টার্গেটের অংশ ছিল না। এটি পুনরায় যুক্ত করা সম্ভবত যথাযথ টার্গেটে একটি ডিফল্ট চেকবক্সের সাথে শেষ হয়েছিল।
ঝোলে

1
এই সমাধানটি আমার পক্ষেও কাজ করেছিল, তবে আমি 100% নিশ্চিত করেছিলাম যে আমি প্রথম শ্রেণি (.h + .m) মুছার আগে আমি পরীক্ষা করেছিলাম যে এটি আমার টার্গেটের অংশ ছিল। এটা আমার জন্য সমস্যা ছিল না। লরার মতো, আমি সবেমাত্র ক্লাসটি মুছে ফেলেছি এবং আবার এটি তৈরি করেছি (আলাদা নামের সাথে), এবং এই পৃষ্ঠায় অন্য কোনও সমাধান ছাড়াই এটি দুর্দান্ত কাজ করেছে।
নট

7

আমি শেষ পর্যন্ত এটি ঠিক করেছি, আমি আমার .m ফাইলে নিম্নলিখিত কোডটি যুক্ত করতে ভুলে গিয়েছিলাম:

@implementation MyTableViewCell

@end

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

আমি .xib কে উত্স হিসাবে দেখার এবং মাই টেবিলভিউসেল দেখার অন্যান্য ফোরামের সমস্ত পদক্ষেপের মধ্য দিয়ে গিয়েছিলাম যদিও আমি আমার কোডের বাইরে মন্তব্য করেছি। আমি সিমুলেটরটি পুনরায় সেট করার চেষ্টা করেছি। এমনকি আমি আমার ক্লাসের সমস্তগুলিকে পৃথক পৃথক ফাইলগুলিতে ইন্টারফেসের মতো নামিয়ে দেওয়ার চেষ্টা করেছি, তবে এ পর্যন্ত কিছুই কার্যকর হয়নি।

PS আমার অভিজ্ঞতায়, .h / .m ফাইলগুলির নাম @ ইনটারফেসের নাম থেকে আলাদা কিনা তা বিবেচ্য নয়। আমার কাছে একাধিক @ অন্তর্ভুক্ত ফাইল রয়েছে যা তারা ভাল কাজ করে।

পিপিএসে আমি ইউআইটিএবলভিউসেল এবং ইউআইসিএল্লেশনভিউসেল কেন এই ক্রটিটি https://stackoverflow.com/a/22797318/539149 এ সৃষ্টি করে তা রেজিস্টারক্লাস ব্যবহার করে সংকলন-সময়ে কীভাবে প্রকাশ করতে হবে তার আরও বিশদ বিবরণ আমার কাছে রয়েছে : forCellWithReuseIdentifier:।


6

এটি ঘটেছিল কারণ .xib পুরানো অ্যাপ ডেলিগেটের সাথে বাসি লিঙ্ক পেয়েছে যা আর নেই। আমি এটি এইভাবে ঠিক করেছি:

  • .Xib এ ডান ক্লিক করুন এবং> উত্স কোড হিসাবে খুলুন নির্বাচন করুন
  • এই ফাইলে, পুরানো অ্যাপের প্রতিনিধি অনুসন্ধান করুন এবং নতুনটির সাথে এটি প্রতিস্থাপন করুন

সোর্স কোড হিসাবে খোলার আর অস্তিত্ব নেই, তবে আপনি ঠিক তত সহজে ডান ক্লিক করতে পারেন, ফাইন্ডারে দেখান, তারপরে ফাইলটিতে ডান ক্লিক করুন এবং টেক্সটএডিটে খুলুন। অবশ্যই, কোনও পরিবর্তন করার আগে ফাইলটিকে ব্যাকআপ করুন;)
স্কট অ্যালেন

6

কেবল অ্যাপ্লিকেল অ্যাপ্লিকেশন-ইন্ডিফিনিਿਸ਼্ল্যাঞ্চিং পদ্ধতি শুরু করার সময় কোডটি নীচে যুক্ত করুন, তবে এটি সূক্ষ্মভাবে কাজ করবে

[মাইক্রাস ক্লাস];


5

আমি এটি চেষ্টা করেছি এবং অন্যান্য, এই সাইটে তালিকাভুক্ত উত্তরগুলি, এর মধ্যে কোনোটাই আমার জন্য এটি বাছাই করা হয়নি। এই মন্তব্যগুলি ( http://www.iphonedevsdk.com/forum/iphone-sdk-development/43330- অজানা- class- interface- builder- file.html থেকে ) সহায়তা করেছে:

অনুসন্ধান এবং অনুসন্ধান এবং অনুসন্ধানের পরে অবশেষে একটি ফাইলের মধ্যে লুকানো এই মোছা শ্রেণীর নামটি আবিষ্কার করেছিলাম। এক্স-কোডে ইন্টারফেস বিল্ডার ফাইলগুলি খুলতে হয়েছিল, তার উপর ডান ক্লিক করে এবং 'উত্স কোড হিসাবে দেখুন' নির্বাচন করে। তারপরে এটি অনুসন্ধান করে সামনে এলো

<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>com.apple.InterfaceBuilder.IBCocoaTouchP lu gin</string>
<string>*this was the class name*</string>

কেবলমাত্র শেষ পংক্তিটি সরিয়ে ফেলা দুর্ভাগ্যজনকভাবে এটি ঠিক করে না, ফাইলটিতে আইটেমের ভুল নম্বর রয়েছে বলে অভিযোগ করে। এটির উপরে রেখাগুলির বিভাগে আপনাকে সংশ্লিষ্ট লাইনটি সরিয়ে ফেলতে হবে, যা উল্লেখ করে CustomClass


5

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


আপনাকে ধন্যবাদ আমি তালিকাটি দেখতে শুরু করেছিলাম এবং আমার ফাইলটি সবেমাত্র অনুপস্থিত খুঁজে পেয়েছি, সম্ভবত এটি তৈরি করার সময় আমি লক্ষ্যগুলি ঠিক করেছিলাম না
schmru


4

এই সমস্যাটি পুরানো হয়ে উঠবে বলে মনে হয় না।

আমি এক্সকোড 8 এর সাথে একই সমস্যাটি পেয়েছিলাম এবং এটি স্মাইলবটের মতোই সমাধান করেছি :

  1. এক্সকোডের মধ্যে আপনার স্টোরিবোর্ড ফাইলটিকে "উত্স কোড" হিসাবে খুলুন:

  2. শ্রেণীর জন্য বর্ণিত শ্রেণীর জন্য অনুসন্ধান করুন এবং পুরো বিটটি মুছে ফেলুন যা বলছে

customClass = "UnrecognizedClassName"

  1. আপনার স্টোরিবোর্ড ফাইলটি "ইন্টারফেস বিল্ডার - স্টোরিবোর্ড" হিসাবে আবার খুলুন এবং আপনার অ্যাপটি পুনরায় তৈরি করুন ild

3

কেবলমাত্র MyClass.m এবং .h কে সরিয়ে দিন এবং এগুলি আবার প্রকল্পে যুক্ত করা আমার পক্ষে কাজ।


3

আমার কাছে 'ইন্টারফেস বিল্ডার ফাইলের মধ্যে অজানা শ্রেণীর ফেভারিটস বাটন' ছিল এবং এটি একটি স্টোরিবুক দৃশ্যে সন্ধান করে যেখানে প্রশ্নটির বোতামটিতে পরিচয় পরিদর্শকের শীর্ষে ক্লাস ফিল্ডে "ফেভারিটস বাটন" এর বোগাস কাস্টম ক্লাস ছিল। আমি এই মানটি পরবর্তী ক্ষেত্রটিতে রাখতে চাইছিলাম: পরিচয় লেবেল।

এটি "ইউআইবাটন" এ পরিবর্তন করা সমস্যার সমাধান করে।


2

আমি সুইফটে এটি ছুটে এসেছি।

প্রজেক্টের বেস.প্লোজ ফোল্ডারে .xib ফাইলটি সরানো এই ত্রুটি থেকে মুক্তি পেয়েছে।


এটি ভাগ করে নেওয়ার জন্য ধন্যবাদ, কিন্তু এটি আমার সমস্যার সমাধান করেনি। : এখানে সমাধান পরিশেষে আমি পাওয়া যায় stackoverflow.com/a/28760089/456434
Mazyod

2
আমিও সেই সমস্যায় পড়েছি। তবে আমার ক্ষেত্রে অনুপস্থিত মডিউলের নামটি ছিল সমস্যা: দেখুন < stackoverflow.com/a/29013058/784318 >
বেসি

1

এক্সকোড ৪ এর অধীনে আমার এইএলমিট অ্যাপ্লিকেশনটিকে ইউনিভার্সাল হিসাবে রূপান্তর করার সময় আমার আজ এই ত্রুটিটি ছড়িয়ে পড়েছিল This এই অ্যাপটিটি ইউটিলিটি টেমপ্লেটের উপর ভিত্তি করে তৈরি এবং মূলত এক্সকোড 3 এর আওতায় নির্মিত হয়েছিল built

সময় বাঁচাতে আমি আইফোন মেইন এবং ফ্লিপসাইড ভিউগুলি ইউনিভার্সাল অ্যাপে উপযুক্ত নামগুলিতে অনুলিপি করেছি। আমি "ইন্টারফেস বিল্ডার ফাইলে অজানা ক্লাস এক্স" ত্রুটিটি অনুভব করেছি। আমার ক্ষেত্রে এটি XIB ফাইল বা টার্গেটে কিছুই ছিল না।

আমি অন্যান্য কারণেও aaLuminate-Info.plist ফাইলটি অনুলিপি করেছিলাম - এটিতে একটি পুরানো কী "মাইনিবি ফাইল ফাইলের নাম" মেইন উইন্ডোতে সেট করা ছিল।

এই কীটি মুছে ফেলার সাথে সাথেই সমস্যাটি ঠিক হয়ে গেল!


1

আমার ক্ষেত্রে আমি এই ত্রুটিটি পেয়েছি কারণ আমি একটি নতুন প্রকল্প তৈরি করে এবং তারপরে বেশ কয়েকটি উত্স ফাইলগুলি মুছে ফেলা এবং কার্যকারী প্রকল্প থেকে একই নামের উত্স ফাইলগুলি অনুলিপি করে কিছু কাজ সংরক্ষণ করার চেষ্টা করেছি। আমি আমার মেইনস্টিরিবোর্ড ফাইলটিও অনুলিপি করেছি যা আমার রুটভিউ নিয়ন্ত্রণকারীকে খুঁজছিল। যাইহোক, আমি যখন পূর্বের পণ্যটি থেকে মূল রুটভিউ কনট্রোলারটি মুছে ফেলেছিলাম এবং তারপরে রুটভিউ কনট্রোলারটিতে যুক্ত করেছি, স্পষ্টত অ্যাড ফাইল অপারেশন উপরের পরামর্শ মতো লক্ষ্য বাক্সটি "চেক" করতে ব্যর্থ হয়েছে। কেবলমাত্র নতুন আমদানি করা ".m" ফাইলগুলিকে কেবলমাত্র অনুসন্ধানের মাধ্যমে এবং লক্ষ্য সদস্যতার বাক্সটি পরীক্ষা করা হয়েছে তা নিশ্চিত করে, সবকিছু ঠিকঠাক ছিল। আমি মনে করি যা ঘটছিল তা হ'ল স্টোরিবোর্ড ফাইলটি এমন একটি শ্রেণীর সন্ধান করছিল যা লক্ষ্য সদস্যপদটি চেক না করায় লিঙ্কটি থেকে "বাদ দেওয়া" হয়েছিল। টার্গেটের জন্য প্রয়োজনীয় ফাইলগুলি ফাইলের পরিদর্শককে লক্ষ্য সদস্যপদে এতটা মনোনীত করা হয়েছে তা নিশ্চিত করে কৌশলটি চালিয়ে গেছেন। ধন্যবাদ প্যাট! (উপরে দেখুন)


1

আমার ক্ষেত্রে এটি ছিল কারণ আমি .h ফাইলে একটি ইউআইটিএবলভিউ ঘরের সাবক্লাসের একটি সাবক্লাস ঘোষণা করেছিলাম (উভয় সাবক্লাসের ঘোষণা একই .h ফাইলে ছিল), তবে সেই দ্বিতীয় সাবক্লাসের খালি বাস্তবায়ন করতে ভুলে গেছি .m ফাইল।

আপনি .h ফাইলে ঘোষণা করেন এমন একটি সাবক্লাসের কোনও সাবক্লাস বাস্তবায়ন করতে ভুলবেন না! সহজ, তবে ভুলে যাওয়া সহজ কারণ আপনি যদি প্রতি ঘন্টা .h / .m ফাইলের সাথে এক শ্রেণির সাথে কাজ করছেন তবে এক্সকোড আপনার জন্য এটি করবে।


1

আমার "ইন্টারফেস বিল্ডারে অজানা শ্রেণি রেটভিউ" ছিল যেখানে রেটভিউ ইউআইভিউর একটি সাবক্লাস ছিল। আমি আমার স্টোরিবোর্ডের দৃশ্যে একটি ইউআইভিউ ফেলেছি এবং কাস্টম শ্রেণীর ক্ষেত্রটি রেটভিউতে পরিবর্তন করেছি। তবুও, এই ত্রুটিটি উপস্থিত হয়েছিল।

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

অবশেষে, আমি উত্স কোড ফাইলগুলি ফাইল পরিদর্শকের কাছে নিজেই পরিদর্শন করেছি। সেখানে আমি আবিষ্কার করেছি যে উত্স কোড ফাইল (যা আমি একটি টিউটোরিয়াল থেকে অনুলিপি করেছি) আমার টার্গেটের সাথে সম্পর্কিত নয়। অন্য কথায়, এটির কোনও টার্গেট সদস্যপদ ছিল না। আমি সেই বাক্সটি পরীক্ষা করেছিলাম যা ক্লাসের উত্স কোড ফাইলটিকে লক্ষ্য অ্যাপের সদস্য করে তোলে এবং ত্রুটি বার্তাটি চলে যায়।


1

আমার ক্ষেত্রে আমি স্টোরবোর্ডের পরিচয় পরিদর্শকের (উপরে শীর্ষে 'কাস্টম ক্লাস' এর অধীনে) নির্বাচিত হয়েছিল বুঝতে না পেরে "ভিউকন্ট্রোলার" নামে একটি শ্রেণি মুছে ফেলেছিলাম।

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

আমার জন্য কাজ!


1

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

অ্যাপল মাচ-ও লিংকার ত্রুটি (APActivityIcon)


1

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

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