我从.net网络服务器获取网络服务。
在进程中(获取数据)我正在显示带有活动指示符的子视图。
完成获取数据后,我需要关闭该视图。
我有两个类,一个是myclassviewcontroller,webservices
基本上我正在编写代码来获取Web服务webservices。
在
的webservices课程中- (void)connectionDidFinishLoading:(NSURLConnection *)连接我这样调用myclass。
myclassviewcontroller *obj = [[myclassviewcontroller alloc]init];
[obj mymethod];
在myclassviewcontroller上,我为我的方法编写了这段代码。
(void)mymethod {
[loadview removeFromSuperview]; }
执行该方法但不删除视图。
我已经在myclassviewcontroller.h类中声明了它。
我通过在NSlog中保留一些文本来检查这一点
但是,如果我使用计时器在myclassviewcontroller.m中调用此mymethod,则会删除视图。
出了什么问题。
任何人都可以帮助我。
我想可能会理解我的问题是什么。如果没有,请让我发表评论。
提前感谢你。
答案 0 :(得分:0)
问题可能是当你的“main”类已经分配了“loadview”但myclassviewcontroller中的“不可见”时你实例化你的myclassviewcontroller,所以myclassviewcontroller的新实例并不真正知道谁是“loadview”。 ..
我的意思是:loadview被分配并添加到mainView(在您分配的同一个类中) “myclassviewcontroller” ......) 但是你试着删除它不是在你的mainView中,而是在myclassviewcontroller中......
尝试以这种方式修改你的方法:
(void)mymethod {
if (loadview!=nil){
NSLog(@"I'm here...");
[loadview removeFromSuperview];
}
}
查看在调用方法的时间和位置是否存在“loadview”(在myclassviewcontroller中)
卢卡
答案 1 :(得分:0)
我认为代码的问题在于您访问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];
或
[obj mymethod]; // if you wanted to add more code in that function
因此,真正的问题是您访问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
需要@synchronize viewController
。
然后在connectionDidFinishLoading:
中,您只需拨打[viewController.loadview removeFromSuperview];