为啥我的自定义 iPhone 委托不起作用?

Posted

技术标签:

【中文标题】为啥我的自定义 iPhone 委托不起作用?【英文标题】:Why isn't my custom iPhone delegate working?为什么我的自定义 iPhone 委托不起作用? 【发布时间】:2010-01-27 22:58:10 【问题描述】:

我只是想构建一个简单的委托,它编译成功,但它现在似乎没有做任何事情。 请在下面查看我的代码,FirstViewContoller 和 SecondViewController 都有单独的 xib 文件,当然,SecondViewController 有一个连接到 myMethod 的按钮。

几个月来,我一直在学习有关 Objective c 和 iPhone SDK 的方法,我一直在使用一本书和 lynda.com 教程来帮助,实际上我使用 xcode 模板复制了大部分代码实用程序应用程序,我相信我了解这里发生了什么,但是我错过了什么,因为按钮没有响应。

如果您需要更多信息,请询问。

非常感谢, 克里斯

SecondViewController.h

#import <UIKit/UIKit.h>

@protocol SecondViewControllerDelegate;


@interface SecondViewController : UIViewController 
    id <SecondViewControllerDelegate> delegate;


@property (nonatomic, assign) id <SecondViewControllerDelegate> delegate;


-(IBAction) myMethod;

@end

@protocol SecondViewControllerDelegate

-(void)viewControllerDidFinish:(SecondViewController *)controller;

@end

SecondViewController.m

@implementation SecondViewController

@synthesize delegate;

-(IBAction) myMethod

    [self.delegate viewControllerDidFinish:self];

//
@end

FirstViewController.h

@interface FirstViewController : UIViewController <SecondViewControllerDelegate>
//
@end

FirstViewController.m

@implementation FirstViewController

-(void)viewControllerDidFinish:(SecondViewControllerDelegate *)controller

    NSLog(@"delegate is being used");

//
@end

编辑 - 这是一篇旧帖子,但只是为了澄清一下,我只是忘记在 FirstViewController 中分配 SecondViewController 委托

【问题讨论】:

我没有看到您分配 SecondViewController 的委托属性,您必须在创建时这样做?向 nil 发送消息是合法的... 你能举个例子吗?这可能是缺少的 好的,我知道了,非常感谢。分配委托属性是有意义的,我在查看实用程序模板时忽略了这部分,因为我没有做任何反面视图工作。我现在明白仅声明委托是不够的,感谢! 【参考方案1】:

SecondViewController的delegate属性如何赋值? 这是我遗漏的最后一部分......

【讨论】:

【参考方案2】:

两件事:

    你的IBAction方法myMethod,如果真的是IBAction,需要带参数: -(IBAction)myMethod:(id)sender 在指责委托模式之前,请确保正在调用 myMethod(设置断点并查看)。

    您的委托方法似乎被声明为将委托类型作为参数,而不是您似乎想要传递的 viewController。这可能都被 id 类型所掩盖,但我认为您可能想要重新调整声明。

【讨论】:

感谢 Ben 的回复,但它没有帮助 1 - 如果我尝试向 IBaction 方法添加发件人参数,我会在 IB 中收到错误并且应用程序崩溃 2 - 这是一个错字将代码转移到这个问题时,我已经修改了上面的内容,但情况并非如此。还有什么可能吗? 再次感谢本,请忽略亚当的建议。感谢您指出我的烂摊子! 备案,-(IBAction)respondToButtonClick; - (IBAction)respondToButtonClick:(id)sender; - (IBAction)respondToButtonClick:(id)sender forEvent:(UIEvent*)event;都是有效的 IBAction,根据developer.apple.com/mac/library/documentation/DeveloperTools/… 如果你更改 IBAction 的类型,我认为你必须在 IB 中重新连接连接,否则它会尝试发送错误的选择器 酷,很高兴它正在工作。我假设在未复制的 sn-ps 中您正在设置委托。 :) 啊,我会试一试,我现在不在我的电脑旁,但是 IB 上的错误消息确实说该操作不再可用,所以我想重新接线确实可以感觉,仍然习惯于在 mac 上开发,但是当我知道自己在做什么时,这很好!再次感谢

以上是关于为啥我的自定义 iPhone 委托不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的自定义 ButtonRenderer 不起作用?

不知道为啥我的自定义 UICollectionViewCell 不起作用?

为啥我的自定义按钮状态不起作用?

为啥我的自定义 XML RPC 获取配置不起作用?

为啥我的自定义 process.env 在 dotenv 中不起作用?

为啥我的自定义验证器在 parsley.js 中不起作用?