相关疑难解决方法(0)

无法在Mac上使用ARC使用respondsToSelector

当我respondsToSelector在ARC环境中调用时,收到以下错误消息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
Run Code Online (Sandbox Code Playgroud)

这是实现文件

#import "MTScrollView.h"

@implementation MTScrollView

@synthesize delegate;


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

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

@end
Run Code Online (Sandbox Code Playgroud)

有关我为什么会收到此错误的任何建议?

macos objective-c automatic-ref-counting

83
推荐指数
2
解决办法
1万
查看次数

self.delegate respondsToSelector:...不编译

我已经实现了一个协议,一个可选的方法和调用方法我想发respondsToSelector:self.delegate之前,我发送消息,但是,这并不编译.失败消息是:

没有已知的选择器'respondsToSelector'的实例方法.

作为解决方案,我"清理"了如下所示的代表,它编译了...

//MyClass.h:

@class MyClass;

@Protocol MyClassDelegate
- (void)myClass:(MyClass *)sender willDoSomething:(BOOL)animated;
@end

@interface MyClass : UIViewController

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

@end
Run Code Online (Sandbox Code Playgroud)

//MyClass.m:

...
@synthesize delegate = _delegate;
...

id sanitizedDelegate = self.delegate; //Hmmmm... why does this work?

if ([sanitizedDelegate respondsToSelector:@selector(myClass:willDoSomething:)]) {
    [self.delegate myClass:self willDoSomething:animated];
}
Run Code Online (Sandbox Code Playgroud)

.

我检查了一些帖子,包括这个,但它没有回答编译失败问题.

此外,替代访问器不起作用......

[self delegate]
//or
_delegate
Run Code Online (Sandbox Code Playgroud)

有没有人看过这个或者可以建议更好的处理方式?

IOS 5.0:(9A334),Xcode 4.2.1(4D502)

xcode ios5

33
推荐指数
2
解决办法
2万
查看次数

标签 统计

automatic-ref-counting ×1

ios5 ×1

macos ×1

objective-c ×1

xcode ×1