айфон.делегаты и свойства - PullRequest
0 голосов
/ 27 июля 2011

У меня есть viewController (давайте назовем его vcA), и у этого viewController есть свойство NSArray, объявленное и синтезированное.

NSArray *myProperty;

...
@property (nonatomic, retain) NSArray *myProperty;

и затем синтезирован на .m

этот vcA является делегатом для другого viewController, vcB.

Внутри vcB я делаю:

NSArray *getMyPropertyFromDelegate = (NSArray *)[delegate myProperty];

и я получаю сообщение об ошибке предупреждение: семантическая проблема: метод экземпляра '-myProperty' не найден (тип возвращаемого значения по умолчанию равен 'id')

Я знаю, что могу поменять это предупреждение, изменяястрока на

NSArray *getMyPropertyFromDelegate = (NSArray *)[(vca*)delegate myProperty];

и импорт vcA.h, но я пытаюсь сделать vcB настолько независимым, насколько это возможно, потому что делегат может измениться.

Как мне сделать это, работая только ссобственность делегата?

спасибо

Ответы [ 2 ]

1 голос
/ 27 июля 2011

Я предлагаю вам написать собственный протокол.

Сделайте vca просмотр контроллера, соответствующего протоколу, а в vcB объявите свойство делегата:

@property(retain) id <MyProtocol> delegate;

Это означает, что делегат может быть любого типа, если он соответствует MyProtocol.

Здесь является примером.

// MyProtocol.h
@protocol MyProtocol <NSObject>

@property(retain) NSArray *myProperty;

@end

// vca.h
@interface vca : XXXX <MyProtocol> {
....
}
@property(retain) NSArray *myProperty;


// vca.m
@synthesize myProperty; // or provide a getter
0 голосов
/ 27 июля 2011

В соответствии с вашими комментариями к решению Винса, я бы сказал, что вам нужно немного узнать о протоколах, поскольку они (почти?) Всегда используются с концепцией делегата.

Вы можете начать с http://iosdevelopertips.com/objective-c/the-basics-of-protocols-and-delegates.html
Хороший простой код, богатый комментариями.

http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProtocols.html для официальной документации Apple.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...