«Код хороших кодеров и его повторное использование хорошими кодерами» Это происходит прямо сейчас, но «Хороший кодер» - единственный ОДИН , которому нравится этот код. и «Великие Кодеры» предназначены только для того, чтобы обнаружить ошибку в этом, потому что у них нет времени, чтобы думать и кодировать. Но у них есть время найти ошибку в этом коде.
, поэтому не критикуйте !!!!!!!!
Создайте свой собственный код так, как ВЫ хотите.
Я не буду вдаваться в подробный анализ опубликованного вами кода - самый полезный ответ, который вы можете получить, - это какое-то указание на общие принципы, выходящие за рамки конкретного образца кода. Вот общие принципы ...
[object setDelegate: self];
или установки object.delegate = self;
в вашем коде. - RespondsToSelector:
) и вызывает этот метод, если это так. Затем делегат получает контроль, чтобы делать все, что он должен ответить, прежде чем вернуть управление вызывающему. В конкретном примере, над которым вы работаете, обратите внимание, что GKPeerPickerController имеет свойство с именем delegate
, который принимает объект типа id
. Это означает id
(любой подкласс NSObject), реализующий методы в протоколе GKPeerPickerControllerDelegate
. GKPeerPickerControllerDelegate , в свою очередь, определяет ряд методов делегата и описывает, когда они будут вызваны. Если вы реализуете один или несколько из этих методов (в документации говорится, что все они являются необязательными, но ожидается два) и зарегистрируетесь в качестве делегата, эти методы будут вызваны. (Обратите внимание, что вам не нужно объявлять прототип метода в файле .h, просто импортируйте заголовок протокола и реализуйте метод в файле .m.
Я изучаю разработку ObjC и iPhone. Я бы не стал заходить так далеко, чтобы сказать, что прекрасно понимаю делегатов и их использование. Ваше первое приложение для iPhone , которое можно найти на портале разработчиков на сайте Apple, подробно рассматривает очень простой пример, в котором используется делегат TextField для переопределения метода, позволяющего скрыть клавиатуру при редактировании в 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
. Насколько я понял, важно то, что в каком бы классе вы ни реализовали методы делегата, этот класс должен следовать протоколу этого конкретного делегата (имея имя протокола в угловых скобках непосредственно рядом с имя класса, от которого он наследуется).