ম্যাকের এআরসি ব্যবহার করে প্রতিক্রিয়াশক্তি নির্বাচন করতে পারবেন না


83

আমি যখন respondsToSelectorএকটি আরসি পরিবেশে কল করি তখন আমি নীচের ত্রুটি বার্তাটি পাইAutomatic Reference Counting Issue No known instance method for selector respondsToSelector:

এটি শিরোনাম

#import <AppKit/AppKit.h>


@class MTScrollView;

@protocol MTScrollViewDelegate
-(void)scrollViewDidScroll:(MTScrollView *)scrollView;
@end


@interface MTScrollView : NSScrollView 
{

}

@property(nonatomic, weak) id<MTScrollViewDelegate>delegate;

@end

এটি বাস্তবায়ন ফাইল

#import "MTScrollView.h"

@implementation MTScrollView

@synthesize delegate;


- (void)reflectScrolledClipView:(NSClipView *)aClipView
{
    [super reflectScrolledClipView:aClipView];

    if([delegate respondsToSelector:@selector(scrollViewDidScroll:)])
    {
        [delegate scrollViewDidScroll:self];
    }
}

@end

আমি কেন এই ত্রুটি পাচ্ছি সে সম্পর্কে কোনও পরামর্শ?

উত্তর:


277

প্রোটোকলটি এনএসবজেক্টের সাথে সামঞ্জস্য করুন

@protocol MTScrollViewDelegate <NSObject>

অন্যথায় সংকলকটি মনে করে না যে বস্তুটি এনএসবজেক্ট বার্তাগুলির মতো প্রতিক্রিয়া জানাবে respondsToSelectorএবং একটি সতর্কতা তৈরি করবে। এটি কোনওভাবেই সমস্যা ছাড়াই রানটাইমে সফল হবে।


4
@piobyz, respondsToSelectorএকটি দৃষ্টান্ত পদ্ধতি NSObjectতাই জানি সিস্টেম চাহিদা যে প্রতিনিধি এর উপশ্রেণী কিছু হয়NSObject
ডেভিড

4
: @David ধন্যবাদ, আপনি করছেন ঠিক আছে, অতিরিক্ত এখানে আরো কিছু তথ্য stackoverflow.com/questions/1304176/...
পাযত্র Byzia

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

4
@ পাইওবাইজ: কারণ respondsToSelector:এটি এনএসবজেক্ট প্রোটোকলের একটি অংশ। delegateসম্পত্তি ঘোষিত হয় id <MTScrollViewDelegate>, যেখানে বলা আছে শুধু তাই বার্তাগুলি প্রতিনিধি সাড়া যে প্রোটোকল ঘোষিত। সুতরাং, সংকলকটি যেগুলির respondsToSelector:মধ্যে রয়েছে তা জানতে আপনার NSObject প্রোটোকলের সাথে সামঞ্জস্য করার জন্য আপনার সেই প্রোটোকলটি দরকার ।
পিটার হোসি

4
@ ডেভিড: বেশ নয় Not delegateশ্রেণীর নামের সাথে ঘোষণা করা হয়নি, সুতরাং এনএসবজেক্ট শ্রেণিটি এখানে প্রাসঙ্গিক নয় — সংকলকটি জানে না এবং এখনও তা জানে না যে এই দুটি বিষয় সম্পর্কিত। "এনএসবজেক্ট" যা সমাধানের অংশ এটি হ'ল এনএসবজেক্ট প্রোটোকল , কারণ সেখানেই respondsToSelector:ঘোষণা করা হয়েছে। বিকাশকারী.অ্যাপল.
com/লিবারি / ম্যাক / ডকুমেন্টেশন / কোকো / রেফারেন্স /…

4

সুইফ্টের জন্য এটি হয়ে যায়:

@objc protocol MTScrollViewDelegate: NSObjectProtocol

এনএসবজেক্ট প্রোটোকলগুলি এমন পদ্ধতিগুলি গোষ্ঠীভুক্ত করে যা সমস্ত উদ্দেশ্য-সি অবজেক্টের মৌলিক।

এনএসওবজেক্টপ্রোটোকল কী তা সম্পর্কে আরও তথ্যের জন্য: https://developer.apple.com/library/ios/docamentation/Cocoa/References/Foundation/Protocols/NSObject_Protocol/index.html

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