简单的委派的例子吗?
-
20-08-2019 - |
题
Ok,我的编程在目标-C和使用载。我已经阅读过文件上的苹果网站,了解什么委托的,但当我来到了一部分谈到如何实际执行代表的方法投入的代码,我只是感到困惑,尤其是当他们说有点像"现在实现委托的方法"。 也许这只是我,但我不知道到底在哪里实施的方法(将如.h/.m文件是正确的位置在一个简单的情况下,我仅有的ViewController和如类的?).我想真正的最好方式我了解的是看到一个非常简单的例子。
我已经得到了一些代码下面,我想知道如果有人能去通过,并告诉我怎么连接委托的ViewController因此,它显示了总结?对不起,如果代码看起来长,但这是最简单的代表团的例子我能想到的。为了辩论和具有较少的代码看(使它更容易对我来看看发生了什么事),可以说ServerClass*服务器实现一个服务器和ClientClass*客户实施一个客户。两者都已经彼此相连,并正在等待输入其数量。我放下我的想法将是正确的但是我知道肯定是不完整的(尽连接的代理服务器和客户)。有一件事我不知道放在哪里都议定书》的声明,因此如果有人可以请不要这个简单的问题,它会帮助我很多如学习如何将委托实现的成一类。
通过这种方式,我的工作与该等选择器的新GameKit的iPhone SDK3.0如果有人也想告诉我什么连接是什么。例如,我在 步骤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
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
解决方案
我不会去到任何详细的分析代码发布的最有用的响应你可以得到一些方向作为今为一般性原则,超越一个特定的代码样本。这里的一般原则。
- 委托是一个对象,其目的是(一般)称为到处理或应对具体事件或行动。
- 你必须"告诉"的对象,其接受的委托,你想要代理人。这是通过调用
[object setDelegate:self];
或者设置object.delegate = self;
在你的代码。 - 对象,作为代表应该实现的指定 代理方法.的对象通常定义方法,无论是在协议,或者在NSObject通过一个类别作为缺省/空的方法,或两者。(正式协议办法可能是清洁剂,特别是现在这个目标-C2.0支持任择议定书》的方法。)
- 当一个相关的事件发生时,呼吁对象,查看如果委托实现的匹配的方法(使用
-respondsToSelector:
),并呼吁这一方法,如果它。代表然后有控制做什么就必须应对返回之前,控制的呼叫者。
在具体的例子你工作过,请注意 GKPeerPickerController 有一个酒店命名 delegate
其接受对象的类型 id<GKPeerPickerControllerDelegate>
.这意味着一个 id
(任何类NSObject)实现中的方法 GKPeerPickerControllerDelegate
协议。 GKPeerPickerControllerDelegate 反过来限定数目的委派方法,并介绍时,他们将被称为。如果实现一个或多个这些方法(该文件说都是任选的,而是两个预期),并注册为一个委托人,那些方法将被称为。(注意,你不需要声明的一方法的原型在你的.h文件,只有进口的议定书》标题和实现该方法在你的.m文件。
其他提示
我学习ObjC和iPhone的发展。我不会达到迄今最高至可以说,我理解代表和他们的使用完美。 您的第一个iPhone应用程序,发现在苹果网站上的开发者门户网站,详细走过一个很简单的例子,它利用了文本字段的委托的覆盖方法,使TextField时完成编辑后的键盘消失。例如,如果我可以从那里粘贴相关片段:
// MyViewController.h
#import <UIKit/UIKit.h>
@interface MyViewController : UIViewController <UITextFieldDelegate> {
UITextField *textField;
UILabel *label;
NSString *string;
}
@property (nonatomic, retain) IBOutlet UITextField *textField;
@property (nonatomic, retain) IBOutlet UILabel *label;
@property (nonatomic, copy) IBOutlet NSString *string;
- (IBAction)changeGreeting:(id)sender;
@end
// MyViewController.m
#import "MyViewController.h"
@implementation MyViewController
@synthesize textField;
@synthesize label;
@synthesize string;
- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {
if (theTextField == textField) {
[textField resignFirstResponder];
}
return YES;
}
@end
看过来,textFieldShouldReturn
是作为UITextFieldDelegate
协议的一部分的方法。虽然我已经明白了,什么是重要的是,无论哪级你实现委托方法,该类必须遵循特定委托的协议(由具有紧靠尖括号中的协议名称它继承的类的名称)。