iOS: получить значение переменной экземпляра (свойство) от делегата - PullRequest
0 голосов
/ 16 февраля 2012

Я занимаюсь разработкой простого приложения с несколькими представлениями. У меня есть базовый вид и второй вид, называемый после базы. Базовый вид служит делегатом для второго вида.

Я хотел бы, во втором представлении, установить и получить значение свойства в baseView («имя»). Поскольку во втором представлении делегат является объектом secondViewDelegate, у него нет метода name.

baseView.h (пропуск импорта):

@interface baseView : UIViewController <secondViewDelegate> {
}
@property (retain) NSString *name;

@end

secondView.h (пропуск импорта):

@protocol secondViewDelegate;

@interface secondView : UIViewController{
}
@property (nonatomic,assign) id <secondViewDelegate> delegate;

@end

@protocol secondViewDelegate 
- (void) secondViewDidFinish:(secondView *)controller;
@end

Какой здесь обычный подход? Мне действительно нужно реализовать геттер и сеттер для протокола? Как:

@protocol secondViewDelegate 
- (void) secondViewDidFinish:(secondView *)controller;
- (NSString *)getName;
- (void)setName:(NSString *)newName;
@end

Или есть какой-нибудь хороший способ получить доступ к свойству baseView или хотя бы получить экземпляр? (Это хорошая идея?)

Я все еще довольно новичок в разработке под iOS, если это не очевидно.

Ответы [ 2 ]

2 голосов
/ 17 февраля 2012

Поскольку вы сталкиваетесь с проблемой определения протокола делегата (хорошая вещь IMO), вы должны придерживаться своего проектного решения и добавить свойство в протокол вместо того, чтобы искать «умное» решение, которое устраняет предупреждение , Вы можете использовать @property для объявления протокола, например:

@protocol secondViewDelegate
@property(retain) NSString* name;
@end

Если вам не нравится иметь свойство в вашем протоколе, то вам, вероятно, следует пересмотреть свои проектные решения: что должен делать secondViewDelegate или почему secondView необходимо установить свойство.

0 голосов
/ 16 февраля 2012

Вы можете просто вызвать его -name или -setName: методы, хотя в результате появится предупреждение компилятора, они будут работать.Изменить: если вы приведете объект к соответствующему типу, он даже не предупредит.

...