1

我有一个奇怪的问题:当从 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

编辑:此时的问题是,非常奇怪......事实上,实际上,只有当我从第二个类中调用方法“removeGbif”时,我才能访问 iVar“vueGbif”(我创建了第一个类的实例在这个)中,例如按钮上的操作。在这种情况下,“removeFromSuperview”指令被正确执行,创建的视图被移除。并且“vueGbif”存在且不为 NULL。但是......如果我在视图“vueGbif”中添加一个按钮,在创建它并将其添加到当前视图(这是第二类的一个实例)时,然后,如果我触摸这个按钮来触发“removeGbif”在第二类中,此时“vueGbif”等于第二类中的NULL,removeFromSuperview根本不起作用。

任何想法 ?

4

0 回答 0