gpt4 book ai didi

objective-c - 简单的委托(delegate)示例?

转载 作者:太空狗 更新时间:2023-10-30 03:31:49 27 4
gpt4 key购买 nike

好的,我正在用 Objective-C 编程并使用 Xcode。我已经通读了 Apple 网站上的文档并了解了委托(delegate)是什么,但是当我谈到它谈论如何将委托(delegate)方法实际实现到代码中的部分时,我感到很困惑,尤其是当他们说“现在实现委托(delegate)的方法”时方法。”也许只有我一个人,但我不知道在哪里实现该方法(在我只有 ViewController 和 AppDelegate 类的简单情况下,AppDelegate.h/.m 文件是否是正确的位置?)。我想对我来说最好的学习方法就是看一个非常简单的例子。

我在下面有一些代码,我想知道是否有人可以通过并告诉我如何将委托(delegate)连接到 ViewController 以便它显示总和?对不起,如果代码看起来很长,但这是我能想到的最简单的委托(delegate)示例。为了争论和查看更少的代码(让我更容易看到发生了什么),可以说 ServerClass *server 实现了一个服务器,而 ClientClass *client 实现了一个客户端。两者已经相互连接,正在等待输入他们的号码。我写下了我认为正确的内容,但我确信它不完整(就将委托(delegate)连接到服务器和客户端而言)。我不知道放在哪里的一件事是协议(protocol)声明,所以如果有人可以解决这个简单的问题,就学习如何将委托(delegate)实现到类中而言,这将对我有很大帮助。

顺便说一下,我正在使用 iPhone SDK 3.0 的新 GameKit 中的 Peer Picker,如果有人也想向我展示什么与什么有关。例如,我在 step 3 of the Apple guide for Peer Picker .现在,我不知道第 5 步在我的项目中的位置。感谢所有可以帮助我理解这个委托(delegate)实现的人...到目前为止你们都很棒!

ExampleAppDelegate.h

#import <UIKit/UIKit.h>

@class ExampleAppViewController;

@interface ExampleAppDelegate : NSObject <UIApplicationDelegate> {
UIWindow *window;
ExampleAppViewController *viewController;
int sum;
}

@property (nonatomic, retain) sum;
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet ExampleAppViewController *viewController;

-(void) addNum:(int)num;
@end

ExampleAppDelegate.m

#import "ExampleAppDelegate.h"
#import "ExampleAppViewController.h"

@implementation ExampleAppDelegate

@synthesize window;
@synthesize viewController;


- (void)applicationDidFinishLaunching:(UIApplication *)application {

application.idleTimerDisabled = YES;

// Override point for customization after app launch
[window addSubview:viewController.view];
[window makeKeyAndVisible];
}


- (void)dealloc {
[viewController release];
[window release];
[super dealloc];
}

-(void)addNum:(int)num {
sum += num;
}

@end

ExampleAppViewController.h

#import <UIKit/UIKit.h>
#import <GameKit/GameKit.h>

@interface ExampleAppViewcontroller : NSObject {
IBOutlet UILabel *sumField; // will display the total sum, one number entered //by the server and one entered by the client, on both iPhones after calculation

int sum; // the total sum after addition;
ServerClass *server; // some server
ClientClass *client; // some client
int num; // the number to add to sum
}

@property(nonatomic, assign) sum;
@property(nonatomic, retain) num;

-(void) displaySum;
@end

ExampleAppViewController.m

#import "ExampleAppViewcontroller.h"

@implementation ExampleAppViewController

@synthesize sum;
@synthesize num;

-(void) displaySum {
[sumfield setText: @"%i", sum];
}

@end

最佳答案

我不会对您发布的代码进行任何详分割析 — 您可以获得的最有帮助的回复是关于超越特定代码示例的一般原则的一些指导。以下是一般原则...

  • 委托(delegate)是一个对象,其对象(通常)被调用以处理或响应特定事件或操作。
  • 您必须“告诉”接受委托(delegate)的对象您希望成为委托(delegate)。这是通过调用 [object setDelegate:self]; 来完成的。 或设置 object.delegate = self; 在您的代码中。
  • 作为委托(delegate)的对象应该实现指定的委托(delegate)方法。该对象通常在协议(protocol)中或通过类别在 NSObject 上将方法定义为默认/空方法,或两者​​兼而有之。 (正式协议(protocol)方法可能更简洁,尤其是现在 Objective-C 2.0 支持可选协议(protocol)方法。)
  • 当相关事件发生时,调用对象会检查委托(delegate)是否实现了匹配的方法(使用 -respondsToSelector: ),如果实现了则调用该方法。然后,在将控制权返回给调用者之前,委托(delegate)人可以控制做任何它必须响应的事情。

在您正在处理的具体示例中,请注意 GKPeerPickerController有一个名为 delegate 的属性 接受类型为 id<GKPeerPickerControllerDelegate> 的对象 。这意味着 id (NSObject 的任何子类)实现 GKPeerPickerControllerDelegate 中的方法协议(protocol)。 GKPeerPickerControllerDelegate依次定义了一些委托(delegate)方法并描述了它们何时被调用。如果您实现这些方法中的一个或多个(文档说所有方法都是可选的,但应该有两个)并注册为委托(delegate),这些方法将被调用。 (请注意,您无需在 .h 文件中声明方法原型(prototype),只需导入协议(protocol)头并在 .m 文件中实现该方法即可。

关于objective-c - 简单的委托(delegate)示例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1051842/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com