2012-05-14 69 views
0

尽管如此,我还是无法完全理解这些委托方法是如何被调用的。 我有UIViewControllerUITextFieldDelegate在一个类中,这将调用其委托的方法,而无需指定像textField.delegate = self;调用委托方法

但对于一些不同的目的,如UIWebViewDelegate我们应该像webView.delegate = self;进入,它似乎像它调用其委托方法。完善。

但现在我面临一个问题。我在同一班级使用CLLocationManagerDelegateCALayer。对于这两个我给location.delegate =self;layer.delegate =self;在某一点上两者是矛盾相互只的事情之一是工作或者CLLocationManagerDelegateCALayer。另一件事就是停下来。我不是为什么会发生这种情况?任何原因?我们如何克服这一点。即使我计划使用一些其他的框架,比如说UIWebView。这些代表方法也会面临同样的问题。你能告诉我为什么它以这种方式工作吗?

+0

可能它们是在Interface Builder中设置的,它们是? – Andrea

+0

否否。我只在代码中设置代理 – Perseus

+0

选中此项[面向对象程序中的通信](https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaFundamentals/CommunicatingWithObjects/CommunicateWithObjects.html# // apple_ref/DOC/UID/TP40002974-CH7-SW18)。最好的问候;) –

回答

2

在您未指定它们的情况下将调用其委托的类具有默认实现,这意味着它们已经知道该怎么做,并且只会覆盖这些方法才会更改它们的行为。

将2个或更多类设置为相同的委托不应该相互干扰(除非出现非常奇怪的原因,在这两个自定义类中方法的命名方式相同)。

你的问题很可能是你没有实现这些方法或使用这些类错误的事实。

例如,位置管理器需要您创建实例,对其进行配置并START开始运行更新。对于这种类型的委托最常见的方法是“更新位置”(或类似的东西)。如果您希望在每次收到新位置时收到通知,则必须执行该操作。否则,您必须在需要时手动读取位置。

作为一个建议,每次你为一个对象设置一个委托,你必须做object.delegate = self;事情。你可能注意到,你会得到一个警告,直到你在标题中指定它符合该协议:例如。

只要控制单击UITextFieldDelegate单词。

寻找@required下的方法,你必须始终执行这些方法。 @optional有默认实现,所以除非你想改变它不需要实现它们的行为。

+0

是的。当我使用location.delegate = self时,位置管理器正在调用它的委托方法。但是在同一个类中,我给了UIWebViewDelegate和webView.delegate = self。有时我的位置管理器委托方法正在停止。我很困惑。 – Perseus

+0

是什么让你相信你的位置管理器方法正在被停止? – Pochi

+0

我可以看到GPS在状态栏中消失了。我的应用程序是支持后台模式作为位置服务 – Perseus