2013-12-23 3 views
0

У меня есть следующий метод-заголовок в одноточечном:Используйте самостоятельно в качестве параметра в одноточечном

-(int) reconnectToServerForClass:(id)myClass 

Параметр MyClass всегда сам-объект класса вызова. Различные ViewControllers в моем проекте вызывают этот метод, поэтому мой вопрос следующий:

Возможно ли получить доступ к myClass.view или что я могу сделать для достижения этого?


мое намерение состоит в том, что я хочу показать прогресс-HUD для каждого ViewController, который вызывает метод:

MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:myClass.view animated:YES]; 

Не существует потребность в литье MyClass, прежде чем я могу получить доступ к Вид- имущество?

+0

Я не уверен, что вы делаете в этом методе, но да, мы можем получить доступ к любому общедоступному свойству класса с его объектом. – Suryakant

+0

Вы могли бы поделиться своим кодом? Мне трудно понять, что вы просите. Файлы заголовков и пример использования метода reconnectToServerForClass: с вашими классами будут приятными. – vtsatskin

+0

Я отредактировал свой вопрос – nirvana002

ответ

1

Если я правильно понимаю, что вы можете сделать следующее:

-(int) reconnectToServerForClass:(UIViewController *)myClass 
{ 
    //myClass.view 
} 

или внутри метода

-(int) reconnectToServerForClass:(id)myClass 
{ 
    if([myClass isKindOfClass:[UIViewController class]]) 
    { 
     UIViewController *viewController = myClass; //edit as suggested by Peter Segerblom 
     //viewController.view 
    } 
} 

Какой бы вариант вы ни выбрали, что это будет зависеть от того, как вы его используете и как вы хотите управлять или ограничивать вызывающих абонентов, в опции 1 параметр должен быть подклассом UIViewController и тем же для варианта 2, но разница в том, что вы можете передать что угодно, но если тип не UIViewController, он просто ничего не сделает.

Отказ от ответственности: Этот код не проверен и не напечатан из памяти, поэтому он может не компилироваться, сообщите мне, если вы столкнетесь с проблемами, и я отредактирую ответ.

+0

Thx для этого ввода, я понятия не имею, почему я не пробовал это раньше ... – nirvana002

+0

Вам не нужно бросать при назначении из типа 'id' ... –

+0

@PeterSegerblom спасибо, не знал, что – Armand

0

Да.

Если вы хотите получить к нему доступ из класса singleton, вы делаете элемент или свойство которого является указателем на представление, а затем установите его в reconnectToServerForClass и получите к нему доступ, как и любой другой член.

Если вы хотите получить доступ к нему извне, вы сделать то же самое, и сделать что-то вроде [[MySingleton экземпляр] вид]

Имейте в виду, что драконы лежат впереди своего пути, вам нужно будет убедиться, что views «unset» это свойство до того, как они будут уничтожены, в противном случае ваш singleton может попытаться получить доступ к экземпляру с отсутствующим представлением.

Смежные вопросы