我有一个奇怪的问题:当从 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根本不起作用。
任何想法 ?