Iphone removeFromSuperview没有从另一个类中删除视图调用

Iphone removeFromSuperview没有从另一个类中删除视图调用,iphone,Iphone,我正在从.NETWeb服务器获取web服务 在这个过程中(获取数据),我显示了一个带有活动指示器的子视图 完成获取数据后,我需要关闭该视图 我有两个类,一个是myclassviewcontroller,webservices 基本上,我正在编写代码来获取web服务 在 -(void)connectionIDFinishLoading:(NSURLConnection*)连接我这样调用myclass myclassviewcontroller *obj = [[myclassviewcontrol

我正在从.NETWeb服务器获取web服务

在这个过程中(获取数据),我显示了一个带有活动指示器的子视图

完成获取数据后,我需要关闭该视图

我有两个类,一个是myclassviewcontroller,webservices

基本上,我正在编写代码来获取web服务

-(void)connectionIDFinishLoading:(NSURLConnection*)连接我这样调用myclass

myclassviewcontroller *obj = [[myclassviewcontroller alloc]init];
[obj mymethod];
在myclassviewcontroller中,我为我的方法编写了以下代码

  • (无效)我的方法{

    [loadview removeFromSuperview]; }

已执行该方法,但未删除视图

我已经在myclassviewcontroller.h类中声明了它

我通过在NSlog中保留一些文本来检查这一点

但如果我在myclassviewcontroller.m中使用计时器调用此mymethod,则它会删除视图

怎么了

谁能帮帮我吗

我想它可能会理解我的问题所在。如果没有,让我发表评论


提前感谢您。

问题可能是,当“主”类已分配“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;