какао призрак uiview - не может получить доступ к моему ivar после init - PullRequest
1 голос
/ 18 августа 2011

У меня странная проблема: при создании представления из подкласса UIView, в экземпляр другого подкласса UIView, я имею доступ к объекту только в том методе, в котором я его создаю.В других методах объект имеет значение NULL: я не могу получить доступ, изменить или удалить объект из суперпредставления.код (упрощенный):

// the first class (named Table):
@class Image;
@interface Table : UIView {
   Image *image;
   }
@end

#import "Image.h"
@implementation Table
- init{
    if((self = [super init])) {
    self.frame = CGRectMake(0, 416, 320, 416);
    self.tag = 416;
    // (blah...blah...)
    }
  return self;
  }
@end

// the second class (named Image):
@class Table 
@interface Image : UIView{ 
Table *vueGbif; 
}
-(void) createGbif;
-(void) removeGbif; 
@end

#import "Table.h" 
@implementation Image
-(void) createGbif{ 
vueGbif = [[Table alloc] init]; 
[self addSubview:vueGbif]; 
vueGbif.frame = CGRectMake(0, 0, 320, 416); //<-- here, "vueGbif" 
// is not null and can be set 
}

-(void) removeGbif{ 
[vueGbif removeFromSuperview]; //<-- here, vueGbif
// no longer exists : NSLog returns "null". 
} 
@end

Редактировать: Проблема в это время, очень странная ... На самом деле, на самом деле у меня есть доступ к iVar "vueGbif", только если я вызываю метод "removeGbif"«из второго класса (в этом я создаю экземпляр первого класса), например, с действием на кнопку.В этом случае инструкция «removeFromSuperview» выполняется правильно, а созданное представление удаляется.И "vueGbif" существует и не равен NULL.Но ... Если я добавлю кнопку к представлению "vueGbif", при его создании и добавлении в текущее представление (которое является экземпляром второго класса), и позже, если я коснусь этой кнопки, чтобы вызвать "removeGbif"во втором классе в это время vueGbif равен NULL во втором классе, а removeFromSuperview вообще не работает.

Есть идеи?

...