Проблема при доступе к объекту (UIView) с другим объектом класса! - PullRequest
0 голосов
/ 26 июля 2011

У меня есть два класса A и B.

Класс A содержит UIView с именем myView, а также метод MyMethod для установки положения myView.

-(void)MyMethod:(NSString *)justCheck
{   
[self.view addSubview:myView];
[self.view bringSubviewToFront:myView];

CGRect mframe = [myView frame];

NSLog(@"------------> MyMethod Called = %@",justCheck); 


  // EDIT: the following NSLogs are added later--------------------

NSLog(@"------------> MyMethod Called:mframe:x = %g",mframe.origin.x);      //0

NSLog(@"------------> MyMethod Called:mframe:y = %g",mframe.origin.y);      //42

NSLog(@"------------> MyMethod Called:mframe:H = %g",mframe.size.height);   //317

NSLog(@"------------> MyMethod Called:mframe:W = %g",mframe.size.width);    //320


  //---------------------------------------------------------------

mframe.origin.y = 42; 

[myView setFrame:mframe];
}

Когда кнопка вкласс A с именем buttonOfA вызывает этот MyMethod, он отлично работает, и я вижу myView в позиции 42. код такой, как показано ниже,

-(IBAction)buttonOfA:(id)sender 
{
[self MyMethod:@"I am A"];
}

Но, когда кнопка класса B с именем buttonOfB пытается вызвать этометод, NSLog работает, но я не вижу myView в позиции 42. Код, как показано ниже,

  -(IBAction)buttonOfB:(id)sender 
{
[objOfA MyMethod:@"I am B"];  //objOfA is the object of class A
}

Что здесь происходит ?? Я изо всех сил пытался выяснить проблему,Но я не мог.Пожалуйста, помогите мне.

Спасибо:)

РЕДАКТИРОВАТЬ: четыре NSLogs добавлены в myMethod ()

Ответы [ 3 ]

0 голосов
/ 26 июля 2011

, поскольку myView не является свойством, просто сделайте его свойством класса A и выполните эту работу

-(void)MyMethod:(NSString *)justCheck
{   

    CGRect mframe = [self.myView frame];

    NSLog(@"------------> MyMethod Called = %@",justCheck); 

    mframe.origin.y = 42; 

    [self.myView setFrame:mframe];
}

Чтобы сделать его свойством вместо объявления его как UIView * myView;

Сделайте так в .h файле

@property(nonatomic,retain) UIView* myView;

и в .m класса A сделайте это так

@synthesize myView;

и вам не нужно ничего менять в коде, просто замените все myView на self.myView

0 голосов
/ 26 июля 2011

Убедитесь, что переменная экземпляра myView в объекте класса A инициализирована и добавлена ​​в суперпредставление, когда класс B вызывает MyMethod: для него. В противном случае установка кадра не будет иметь никакого эффекта.

0 голосов
/ 26 июля 2011

Содержит ссылку на объект типа A, но это должен быть тот же объект, который создал UIView. Следовательно, лучше возвращать экземпляр объекта singleton.

Использование возвращенного синглтона для объекта класса A вызывает ваш метод.

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