Iphone 实现UIView类别时出现问题

Iphone 实现UIView类别时出现问题,iphone,objective-c,cocoa-touch,uiview,categories,Iphone,Objective C,Cocoa Touch,Uiview,Categories,无论出于何种原因,以下代码不起作用: #import <Foundation/Foundation.h> @interface UIView (FindUIViewControllerParent) - (UIViewController *) firstAvailableUIViewController; - (id) traverseResponderChainForUIViewController; @end #import "UIView+FindUIViewCon

无论出于何种原因,以下代码不起作用:

#import <Foundation/Foundation.h>

@interface UIView (FindUIViewControllerParent)

- (UIViewController *) firstAvailableUIViewController;
- (id) traverseResponderChainForUIViewController;

@end


#import "UIView+FindUIViewControllerParent.h"

@implementation UIView (FindUIViewControllerParent)

- (UIViewController *) firstAvailableUIViewController 
{
    return (UIViewController *)[self traverseResponderChainForUIViewController];
}

- (id) traverseResponderChainForUIViewController 
{
    id nextResponder = [self nextResponder];
    if ([nextResponder isKindOfClass:[UIViewController class]]) 
    {
        return nextResponder;
    } 
    else if ([nextResponder isKindOfClass:[UIView class]]) 
    {
        return [nextResponder traverseResponderChainForUIViewController];
    } 
    else 
    {
        return nil;
    }
}

@end

parentViewController = [self firstAvailableUIViewController];
#导入
@接口UIView(FindUI控制器客户端)
-(UIViewController*)第一个可用的活动控制器;
-(id)traverseResponderChainForUIViewController;
@结束
#导入“UIView+FindUIViewControllerParent.h”
@实现UIView(FinDuiviewController客户端)
-(UIViewController*)第一个可用的活动控制器
{
返回(UIViewController*)[UIViewController的自遍历响应链];
}
-(id)traverseResponderChainForUIViewController
{
id nextResponder=[self nextResponder];
if([nextResponder IsKindof类:[UIViewController类]])
{
返回下一个响应者;
} 
else if([nextResponder IsKindof类:[UIView类]])
{
返回[nextResponder traverseResponderChainForUIViewController];
} 
其他的
{
返回零;
}
}
@结束
parentViewController=[self-firstAvailableUIViewController];

第一响应者返回为nil,而不是父视图控制器(当我在没有类别的情况下执行时,它工作正常)。我读过一些其他线程,它们说要对项目设置中的其他链接选项进行一些调整,我尝试过这些,但仍然不起作用。有人知道我做错了什么吗?(这段代码几乎完全是从另一个线程复制的,该线程获得了大量的投票)

我发现了我的问题。在视图连接到视图控制器之前,我在init方法my view中查找并存储nextResponder。这就是它正确显示为空的原因。我在按钮操作方法中使用了我的分类方法,然后效果很好。

我发现了我的问题。在视图连接到视图控制器之前,我在init方法my view中查找并存储nextResponder。这就是它正确显示为空的原因。我在button action方法中使用了我的category方法,然后它工作得很好。

在类中抛出一个#错误,这样你就可以检查类别是否被编译了。can-它被编译了,因为当我调试时,那部分代码被激活了。问题是,它为self nextResponder返回的响应程序是nil,而它本不应该是。在类中抛出一个#错误,这样你就可以检查类别是否被编译。can-它被编译是因为当我调试时,该部分代码被激活。问题是,它返回到self nextResponder的响应者为零,而它本不应该为零。