রিসিভার টাইপ *** উদাহরণ বার্তা একটি অগ্রণী ঘোষণা


199

আমার আইওএস 5 অ্যাপে আমার NSObject Statesক্লাস রয়েছে এবং এটির চেষ্টা করার চেষ্টা করছি:

states = [states init];

initপদ্ধতিটি এখানে States:

- (id) init
{
    if ((self = [super init]))
    {
        pickedGlasses = 0;
    }

    return self;
}

তবে লাইনে ত্রুটি আছে states = [states init];

উদাহরণস্বরূপ বার্তার জন্য রিসিভার টাইপ "স্টেটস" একটি অগ্রণী ঘোষণা forward

এর মানে কী? আমি কি ভুল করছি?


আমি একই প্রশ্নটি সার্থক করার চেষ্টা করেছি, তবে প্রতিটা থ্যামের মধ্যে আলাদা সমাধান রয়েছে। আমি কিছুটা বিভ্রান্ত হয়েছি
সেনটাইলএল

3
খুব সংক্ষিপ্ত উত্তরটি হল আপনি হয় একটি # আমদানি (সম্ভবত আপনার উপসর্গের ফাইলে) মিস করছেন বা আপনি একটি "@ ক্লাস অ্যাবসি;" লাইন (উদাহরণস্বরূপ @ ইন্টারফেস লাইনের ঠিক উপরে একটি .h ফাইলে)
Fattie

উত্তর:


440

এর মূল অর্থ হল আপনার স্টেটস ডিক্লেয়ারেশন যুক্ত .h ফাইলটি আমদানি করা দরকার।

তবে আপনার কোডটিতে অন্য অনেক জিনিস ভুল আছে wrong

  • আপনি কোনও বস্তু এনে না রেখেই এটি প্রবেশ করিয়ে দিচ্ছেন +alloc। যে কাজ করবে না
  • আপনি কোনও অবজেক্টটিকে নন-পয়েন্টার প্রকার হিসাবে ঘোষণা করছেন, এটিও কাজ করবে না
  • আপনি আহ্বান করছি না [super init]মধ্যে -init
  • আপনি @classশিরোলেখ ব্যবহার করে ক্লাস ঘোষণা করেছেন , কিন্তু ক্লাসটি কখনও আমদানি করেন নি।

এটি কিছুটা অদ্ভুত হলেও যেহেতু আমার ক্ষেত্রে আমি .hএকটি বিজ্ঞপ্তি সংক্রান্ত রেফারেন্স সমস্যার কারণে কেবল ফাইলটি সরিয়ে ফেলতাম ।
আল্পার

কি একেবারে হাস্যকর কথা। তবে, হ্যাঁ, এটি স্থির করে দিয়েছে।
টিমজওয়ার্স 2

আপনি যদি উদ্দেশ্য-সি তে সুইফট অবজেক্টগুলি ব্যবহার করার চেষ্টা করছেন তবে ভুলে যাবেন না যে সেগুলি উত্তরাধিকার সূত্রে পেয়েছে NSObject
মিশাল আর্থেটেক

27

এফডাব্লুআইডাব্লু, আমি যখন একটি বিদ্যমান প্রকল্পের মূল ডেটা প্রয়োগ করছিলাম তখন আমি এই ত্রুটিটি পেয়েছি। দেখা গেল আমি কোরেডাটা.কে আমার প্রকল্পের সাথে যুক্ত করতে ভুলে গেছি। আমি ইতিমধ্যে আমার প্রকল্পে কোরিডাটা ফ্রেমওয়ার্ক যুক্ত করেছিলাম কিন্তু অ্যাপল এর টেম্পলেটগুলির মতো আমার পূর্ব-সংকলিত শিরোনামের কাঠামোর সাথে সংযুক্ত করে সমস্যাটি সমাধান করেছি:

#import <Availability.h>

#ifndef __IPHONE_5_0
#warning "This project uses features only available in iOS SDK 5.0 and later."
#endif

#ifdef __OBJC__
    #import <UIKit/UIKit.h>
    #import <Foundation/Foundation.h>
    #import <CoreData/CoreData.h>
#endif

2
কী লজ্জাজনক যে প্রায় সমস্ত কোরিডাটা টিউটোরিয়ালটি টেমপ্লেট ব্যবহারের সাথে শুরু করে তবে কোনও বিদ্যমান প্রকল্পের সাথে নয়। এখানে ভুল করা বেশ সহজ।
ইয়েং

24

আমি এই ধরণের বার্তা পেয়েছিলাম যখন আমার কাছে দুটি ফাইল ছিল যা একে অপরের উপর নির্ভর করে। এখানে জটিল বিষয় হ'ল আপনি যদি তাদের হেডার ফাইলগুলি থেকে একে অপরকে (ক্লাস এ আমদানি ক্লাস বি, ক্লাস বি আমদানি ক্লাস এ) আমদানি করার চেষ্টা করেন তবে আপনি একটি বিজ্ঞপ্তিযুক্ত রেফারেন্স পাবেন। সুতরাং আপনি কি করবেন পরিবর্তে @class Aক্লাসগুলির একটি (ক্লাস বি এর) শিরোনাম ফাইলে একটি ফরোয়ার্ড ( ) ঘোষণা রাখুন। যাইহোক, ক্লাস বি বাস্তবায়নের মধ্যে যখন ক্লাস এ এর ​​আইভার ব্যবহার করার চেষ্টা করার সময়, এই খুব ত্রুটিটি উঠে আসে, ক্লাস বি এর .m ফাইলটিতে কেবল একটি সংযোজনই #import "A.h"আমার জন্য সমস্যাটি স্থির করে।


16

আমি ব্যবহার করার চেষ্টা করছিলাম @class "Myclass.h"

আমি যখন এটিকে পরিবর্তন করেছি #import "Myclass.h", এটি ঠিকঠাক কাজ করেছে।


এখানে কেবলমাত্র একটি পার্শ্ব-নোট: @class "Myclass.h"সম্পূর্ণ ভুল। @class Myclassহেডার ফাইলে যেখানে ক্লাসটি আমদানি করা যায় না এমন ক্ষেত্রে ব্যবহার করা উচিত (বিজ্ঞপ্তি সংক্রান্ত রেফারেন্সিংয়ের কারণে, যেমন উদ্দেশ্য-সি-তে একটি সুইফ্ট-সংজ্ঞায়িত শ্রেণীর সাথে ঘটতে পারে) তবে #import "Myclass.h"এটি আমদানি করা যেতে পারে তবে ব্যবহার করা উচিত।
ব্যবহারকারী নয় এমন ব্যবহারকারী

6

আপনি ব্যবহার করছেন

States states;

যেখানে আপনি ব্যবহার করা উচিত

States *states;

আপনার init পদ্ধতিটি এমন হওয়া উচিত

-(id)init {
  if( (self = [super init]) ) {
      pickedGlasses = 0;
  }
  return self;
}

এখন অবশেষে আপনি যখন স্টেটস ক্লাসের জন্য কোনও অবজেক্ট তৈরি করতে যাচ্ছেন তখন আপনার এটি করা উচিত।

State *states = [[States alloc] init];

আমি বলছি না এটি এটি করার সর্বোত্তম উপায় of তবে এটি আপনাকে অবজেক্টগুলি আরম্ভ করার খুব প্রাথমিক ব্যবহার বুঝতে সহায়তা করতে পারে।


5

উদ্দেশ্য সি তে সুইফ্ট ক্লাস বা পদ্ধতি ব্যবহার করার চেষ্টা করার সময় আপনি যদি এই ত্রুটিটি পেয়ে থাকেন : আপনি অ্যাপল এই চিত্রটিতে সংজ্ঞায়িত 2 টি ধাপের একটি ভুলে গেছেন:

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

উদাহরণ:

আপনার Test.mফাইলটিতে ত্রুটি দেখা যাচ্ছে :

শ্রেণীর বার্তার জন্য রিসিভার 'মাই ক্লাস' একটি অগ্রণী ঘোষণা

ধাপ 1: চেক যে Test.hহয়েছে

@class MyClass;

পদক্ষেপ 2: বিল্ড সেটিংসে*-Swift.h ফাইলের নাম সন্ধান করুন ( উদ্দেশ্য-সি উত্পন্ন ইন্টারফেস শিরোনামের নাম সন্ধান করুন )। নাম কিছু হবেMyModule-Swift.h

পদক্ষেপ 3: Test.mউপরের শিরোনামটি আমদানি করে দেখুন check

#import "MyModule-Swift.h"


1

আপনার ইউনিট পদ্ধতির প্রোটোটাইপ। H ফাইলে রয়েছে তা নিশ্চিত করুন।

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


0

দুটি সম্পর্কিত ত্রুটি বার্তা রয়েছে যা আপনাকে বলতে পারে যে ঘোষণা এবং / অথবা আমদানিতে কোনও ভুল with

প্রথমটি আপনি উল্লেখ করছেন, যা আপনার .m মধ্যে একটি @ ক্লাস ঘোষণার সময় আপনার .m (বা .pch ফাইল) এ # ইমপোর্ট না রেখে তৈরি করা যেতে পারে।

দ্বিতীয়টি আপনি দেখতে পাচ্ছেন, যদি আপনার স্টেটস ক্লাসে কোনও পদ্ধতি থাকে তবে:

- (void)logout:(NSTimer *)timer

# ইমপোর্ট যুক্ত করার পরে এটি হ'ল:

"রাজ্যগুলির" জন্য কোনও দৃশ্যমান @ অভ্যন্তরীণ পৃষ্ঠায় নির্বাচককে 'লগআউট:' ঘোষণা করে না

আপনি যদি এটি দেখতে পান তবে আপনার পরীক্ষা করা উচিত এবং আপনি যে শ্রেণিটি আমদানি করছেন বা ফরোয়ার্ড করছেন তার .h ফাইলটিতে আপনার "লগআউট" পদ্ধতিটি (এই উদাহরণস্বরূপ) ঘোষণা করেছেন কিনা।

সুতরাং আপনার ক্ষেত্রে, আপনার একটি প্রয়োজন:

- (void)logout:(NSTimer *)timer;

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

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