Iphone removeFromSuperview没有从另一个类中删除视图调用
我正在从.NETWeb服务器获取web服务 在这个过程中(获取数据),我显示了一个带有活动指示器的子视图 完成获取数据后,我需要关闭该视图 我有两个类,一个是myclassviewcontroller,webservices 基本上,我正在编写代码来获取web服务 在 -(void)connectionIDFinishLoading:(NSURLConnection*)连接我这样调用myclassIphone removeFromSuperview没有从另一个类中删除视图调用,iphone,Iphone,我正在从.NETWeb服务器获取web服务 在这个过程中(获取数据),我显示了一个带有活动指示器的子视图 完成获取数据后,我需要关闭该视图 我有两个类,一个是myclassviewcontroller,webservices 基本上,我正在编写代码来获取web服务 在 -(void)connectionIDFinishLoading:(NSURLConnection*)连接我这样调用myclass myclassviewcontroller *obj = [[myclassviewcontrol
myclassviewcontroller *obj = [[myclassviewcontroller alloc]init];
[obj mymethod];
在myclassviewcontroller中,我为我的方法编写了以下代码
- (无效)我的方法{ [loadview removeFromSuperview]; }
提前感谢您。问题可能是,当“主”类已分配“loadview”,但在myclassviewcontroller中“不可见”时,您实例化了myclassviewcontroller,因此myclassviewcontroller的新实例并不真正知道“loadview”是谁 我的意思是:loadview被分配并添加到mainView(在您分配的同一个类中) “myclassviewcontroller”…) 但随后您尝试将其删除,但不是在mainView中,而是在myclassviewcontroller中 尝试以以下方式修改您的方法:
(void)mymethod {
if (loadview!=nil){
NSLog(@"I'm here...");
[loadview removeFromSuperview];
}
}
查看调用该方法的时间和地点是否存在“loadview”(在myclassviewcontroller中)
luca我相信您的代码的问题在于如何访问
myclassviewcontroller
。在加载数据时,它一定已经出现在屏幕上,因此创建该类的新实例并对其未初始化成员之一(loadview
)调用方法没有任何作用
myclassviewcontroller *obj = [[myclassviewcontroller alloc]init];
// here object has just been initialized
// (it is not the same instance as the one on screen)
[obj mymethod];
如果obj是对屏幕上实际viewcontroller的引用,您可以轻松调用:
[obj.loadview removeFromSuperview];
或
所以,真正的问题是,您访问的myclassviewcontroller
实例与实际在屏幕上的实例不同。您需要一个变量来保存对myclassviewcontroller
的正确实例的引用,以访问loadview
ivar
在webservices.h
中:
@interface webservices : NSObject {
...
// This ivar will have to be set when webservices is initialized
myclassviewcontroller * viewController;
}
@property (nonatomic, retain) myclassviewcontroller * viewController;
而webservices.m
将需要@同步viewController
然后在
connectiondFinishLoading:
中,您只需调用[viewController.loadview removeFromSuperview]代码>此loadview对象是什么?初始化的位置?这是一个带有activityindicator的子视图,我在myclassviewcontroller.h中声明,并将@property(非原子,保留)赋予iti。我在控制台程序中收到这个信号:“EXC_BAD_ACCESS”。视图未被移除OK,需要明确的是:您有一个mainView(UIViewController),其中您:-alloc loadview(并将其视图添加到mainView.view)。-alloc myclassviewcontroller(并将其视图添加到mainView.view)。因此,现在您的mainView“拥有”和“记住”谁是“loadview”,但myclassviewcontroller没有,如果您不告诉的话。-loadview在mainView中可见,但在myclassviewcontroller中不可见。-所以您不能在“myclassviewcontroller”中有方法谁叫“loadview”(或者更好,如果你必须通过某种方式传递它,但一定要在你从视图中删除它之后从内存中释放它)luca
@interface webservices : NSObject {
...
// This ivar will have to be set when webservices is initialized
myclassviewcontroller * viewController;
}
@property (nonatomic, retain) myclassviewcontroller * viewController;