Форум программистов, компьютерный форум CyberForum.ru

Objective-C

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.86
Fennec
1 / 1 / 0
Регистрация: 10.02.2010
Сообщений: 36
#1

Как получить доступ к переменным объекта класса-родителя? - Objective-C

07.06.2012, 19:31. Просмотров 2637. Ответов 6
Метки нет (Все метки)

Я знаю, что обычно передают указатель на объект класса в функцию чайлда, но вот как это сделать на ObjC никак не могу понять.

Попытался сделать так
Objective-C
1
-(void) initBubble:(HelloWorldLayer)parentObj;
Но компиллер заругался. Как это вообще лучше сделать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.06.2012, 19:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как получить доступ к переменным объекта класса-родителя? (Objective-C):

Как получить доступ к объекту другого класса - Программирование iOS
Здравствуйте друзья. Прошу помощи по вопросу В главном viewController cоздаю объект Label и записываю в него текст ...

Как получить доступ к изменению переменной из другого класса? - Objective-C
Это наверное клупый вопрос, но я не могу его решить! создал таблицу с тремя элементами в основе лежит массив с тремя...

Как получить доступ к переменным извне класса? - PHP ООП
в классе, ошибки я вывожу в массив, например $this -> err, там валяется ошибка ввода данных поля формы name. мне надо вывести эту ошибку...

Как получить доступ к переменным одного класса из методов другого - C++ Qt
Есть класс MainWindow с переменными в pablic, и кьютешный QGraphicsView. Нужно вот тут void QGraphicsView::mouseMoveEvent(QMouseEvent*...

Получить доступ к переменным списка другого класса - C#
Если я конечно все правильно понял... Есть класс: class Pay { public string LastName; public double...

Как получить доступ к методам объекта класса наследуемого от Activity, когда он выводится во вкладку - Программирование Android
В главном Активити создаются вкладки на котовые выводятся другие активити. @Override public void onCreate(Bundle...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
zulkis
682 / 609 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
08.06.2012, 05:34 #2
Что Вам нужно сделать?
Если вы передадите указатель на объект в другой объект при его создании - он не будет его "родителем", даже если он таким является по иерархии наследования. Вам следует почитать что такое родительский класс.

Also, init должен возвращать как минимум (id).

Для создания класса используйте конструкцию


Objective-C
1
2
3
4
5
6
7
- (id)init {
   self = [super init]; //super - всегда родительский класс текущего.
   if (self) {
 
   }
   return self;
}
А компилятор ругается видимо на (HelloWorldLayer*) - не?
Fennec
1 / 1 / 0
Регистрация: 10.02.2010
Сообщений: 36
08.06.2012, 11:23  [ТС] #3
Сейчас попробую объяснить еще раз ) Вобщем я на коксе пишу штуковину. У меня вот этот самый Хеллоу Ворлд слой добавляет себе спрайт. Не через наследование, то есть класс не расширяется от родительского. То есть отношение не типа super -> subclass, а parent -> child.

Я просто только-только перекочевал с AS3 на Обджектив, все очень непривычно ) Так вот, проведу аналогию чего я хочу добиться
например у нас есть главный класс который добавляет себе чайлда как объект отображения, а для того, чтобы чайлд имел доступ к свойствам пэрента мы передаем чайлду ссылку на него в его метод-конструктор.
ActionScript 3
1
2
3
4
5
6
7
8
9
10
public class Main
{
    public var bubbles:Array = new Array();
 
    public function Main()
    {
        var bubble:Bubble = new Bubble(this);
        addChild(child);
    }
}
Ну и код чайлда

ActionScript 3
1
2
3
4
5
6
7
public class Bubble
{
    public function Bubble(parentObject:Main)
    {
        trace(parentObject.bubbles);
    }
}
Вот мне надо такую же штуковину сделать на Обджектив Си )
Santer.Net
15 / 15 / 1
Регистрация: 18.11.2010
Сообщений: 122
11.06.2012, 11:19 #4
То что Вы пытались сказать называется композиция.
А что бы ее достичь не обязательно передавать данный параметр в конструкторе. Можно просто создать property в классе, а потом ему установить тот объект который вам нужен.
Хотя можно это и через конструктор сделать, но теряется гибкость.

Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@interface Child:NSObject
 
@property(nonatomic,retain) YourParentClass *parObj;
//2 способ, через конструктор
-(id) initWitParentClass:(YourParentClass *) someParObj;
@end
 
@implementation Child
 
@synthesize parObj;
 
-(id) initWitParentClass:(YourParentClass *) someParObj
{
   self=[super init];
    if(self)
    {
      self.parObj=someParObj;
     }
   return self;
}
@end
Objective-C
1
2
3
4
5
YourParentClass *po=[YourParentClass alloc] init];
Child *chl=[Child alloc] init];
//1 способ
[chl setYourParentClass:po];
[po release];
zulkis
682 / 609 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
11.06.2012, 12:14 #5
Santer.Net, Я бы сказал что композиция с Parent классом неуместна.
Ибо
Objective-C
1
@property(nonatomic,retain) YourParentClass *parObj;
Нехорошо ретейнить родителя предком, очень нехорошо, я думаю не стоит объяснять почему.

В нашем случае это максимум агрегация, то есть не retain, а assign.
Как то так. Если имеются контра аргументы - прошу )
Santer.Net
15 / 15 / 1
Регистрация: 18.11.2010
Сообщений: 122
11.06.2012, 12:44 #6
Я полностью согласен. Не досмотрел с ретеин(((
Fennec
1 / 1 / 0
Регистрация: 10.02.2010
Сообщений: 36
13.06.2012, 18:23  [ТС] #7
Уже успел разобраться, нов се равно спасибо )
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.06.2012, 18:23
Привет! Вот еще темы с ответами:

Как заставить вызвать метод класса-родителя для объекта (полиморфизм) - Java SE
класс BigFloat (длинные вещественные числа с учетом знака) наследуется от BigNum (целые положительные числа). Оба реализуют интерфейс Numb....

Как получить доступ к переменным из if - C#
имеется такой вот код, где есть 4 пути решения проблемы в зависимости о FPAZA, проблема в том что дальше после блоков if меня интересуют...

Как получить доступ к системным переменным? - Java
Добрый день. У меня проблема в следующем. Необходимо написать небольшой инсталлятор, который будет помещать в некоторое место...

Есть класс A и класс B, класс B вложен в класс A и вложен в него, как классу B получить доступ к переменным класса A просто по имени? - C++
На самом деле ничё фантастического я не прошу, ведь: template <class T> class matrix { friend class diagonal; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
13.06.2012, 18:23
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru