为啥我的自定义 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 委托不起作用?的主要内容,如果未能解决你的问题,请参考以下文章
不知道为啥我的自定义 UICollectionViewCell 不起作用?