Jos*_*ley 8 implementation delegates objective-c
好吧,我正在使用Objective-C编程并使用Xcode.我已经阅读了Apple网站上的文档并了解了代理的内容,但是当我谈到如何在代码中实际实现委托方法的部分时,我只是感到困惑,尤其是当他们说"现在实现委托"时方法." 也许它只是我,但我不知道确切地在哪里实现该方法(在我只有ViewController和AppDelegate类的简单情况下,AppDelegate.h/.m文件是否是正确的位置?).我想我学习的最好方法就是看一个非常简单的例子.
我在下面有一些代码,我想知道是否有人可以通过并告诉我如何将委托连接到ViewController,以便它显示总和?很抱歉,如果代码看起来很长,但这是我能想到的最简单的委托示例.为了争论和查看更少的代码(让我更容易看到发生了什么),假设ServerClass*服务器实现了一个服务器而ClientClass*客户端实现了一个客户端.两者已经相互连接,正在等待输入他们的号码.我放下了我认为正确的内容,但我知道它确实不完整(只要将委托连接到服务器和客户端).我不知道放在哪里的是协议声明,所以如果有人能够做到这个简单的问题,那么就学习如何将一个委托实现到一个类中,它会帮助我很多.
顺便说一句,我正在使用iPhone SDK 3.0的新GameKit中的Peer Picker,如果有人还想告诉我什么连接到什么.例如,我在Peer Picker的Apple指南的第3步.现在,我不知道我的项目中第5步的位置.感谢所有能帮助我理解这个代表实施的人......到目前为止你们都很棒!
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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
ExampleAppViewController.m
#import "ExampleAppViewcontroller.h"
@implementation ExampleAppViewController
@synthesize sum;
@synthesize num;
-(void) displaySum {
[sumfield setText: @"%i", sum];
}
@end
Run Code Online (Sandbox Code Playgroud)
Qui*_*lor 12
我不会对您发布的代码进行任何详细的分析 - 对于超越特定代码示例的一般原则,您可以获得的最有用的响应是一些方向.以下是一般原则......
[object setDelegate:self];
或设置object.delegate = self;
代码来完成.-respondsToSelector:
)并调用该方法(如果有).然后,代理人可以控制在将控制权返回给调用者之前做必要的响应.在您正在完成的具体示例中,请注意GKPeerPickerController有一个名为的属性delegate
,它接受一个类型的对象id<GKPeerPickerControllerDelegate>
.这意味着id
实现GKPeerPickerControllerDelegate
协议中方法的(NSObject的任何子类).GKPeerPickerControllerDelegate反过来定义了许多委托方法,并描述了它们何时被调用.如果您实现这些方法中的一个或多个(文档说所有方法都是可选的,但需要两个)并注册为委托,那么将调用这些方法.(请注意,您不需要在.h文件中声明方法原型,只需导入协议标头并在.m文件中实现该方法.
归档时间: |
|
查看次数: |
26384 次 |
最近记录: |