Ios 为什么加载完成后要多次执行操作,为什么要将所有事件排队?
当我们点击后退按钮或表格中的任何单元格进行加载时,在加载完成后会多次调用该操作。下面是我开始加载和停止加载时正在执行的代码片段Ios 为什么加载完成后要多次执行操作,为什么要将所有事件排队?,ios,iphone,uitableview,cocoa-touch,touch,Ios,Iphone,Uitableview,Cocoa Touch,Touch,当我们点击后退按钮或表格中的任何单元格进行加载时,在加载完成后会多次调用该操作。下面是我开始加载和停止加载时正在执行的代码片段 +(void)showLoader_OnView{ APP_DELEGATE.window.userInteractionEnabled = NO; [MBProgressHUD showHUDAddedTo:APP_DELEGATE.window animated:YES]; } 要停止加载,请执行以下操作:- +(void)hideLoade
+(void)showLoader_OnView{
APP_DELEGATE.window.userInteractionEnabled = NO;
[MBProgressHUD showHUDAddedTo:APP_DELEGATE.window animated:YES];
}
要停止加载,请执行以下操作:-
+(void)hideLoader {
APP_DELEGATE.window.userInteractionEnabled =YES;
[MBProgressHUD hideAllHUDsForView:APP_DELEGATE.window animated:YES];
}
请帮帮我
更新
实际上,我正在从服务器获取数据。每当用户转到下一个窗口,然后在ViewWillExearch函数中,我调用一个函数,该函数将点击api以获取数据
-(void)performAutoSync
{
@try
{
if(self.shouldPerformAutoSync)//Necessary conditions to check the auto sync
{
[AppConstants showLoader_OnView]; //here i call the loader.
self.shouldPerformAutoSync = NO;
if(!self.isSyncing)
{
if(!syncBl)
{
syncBl = [[SyncBL alloc] init];
syncBl.delegate = self;
}
if(!syncDl)
syncDl = [[SyncDL alloc] init];
// [self saveModifiedDataForCurrentViewController];
[self delayToAutoSync];
NSMutableDictionary *dictMainData = [NSMutableDictionary new];
[dictMainData setObject:[syncDl fetchCompleteDataAndPrepareDictionary:YES] forKey:@"data"];//@"MainData"];
[syncBl performAutoSync:dictMainData];
}
}
}
@catch (NSException *exception) {
BILog(@"%@",exception);
}
}
不要阻塞主线程。 看到您从
performAutoSync
调用[AppConstants showLoader\u OnView]
,然后showLoader\u OnView
依次执行:
[MBProgressHUD showHUDAddedTo:APP_DELEGATE.window animated:YES]
我只能假设performAutoSync
是在主线程中执行的。当然,这会阻止UI,直到您的操作完成
您应该重新设计,这样就不需要所有的状态变量、全局变量、全局调用,并利用多线程 此外,删除这个,因为它是一个乱七八糟的资格
APP_DELEGATE.window.userInteractionEnabled = NO
您不需要添加APP_DELEGATE.window.userInteractionEnabled=NO;通过[MBProgressHUD showHUDAddeto:APP_DELEGATE.window animated:YES]自动禁用ui;请提供您的服务呼叫代码您提供的代码不能说明您面临的任何问题。如果您想让人们了解您的问题并帮助您解决问题,您应该提供更多详细信息。我已经更新了我的问题,请检查。您是否使用了
performSelectorInBackground
?不,实际上我使用了GCD
来运行[syncBl performAutoSync:dictMainData]代码>后台线程中的函数。这是我用来从服务器获取数据的函数(即异步操作)。我在iPhone开发方面的经验较少,因此我不了解性能选择背景。我怎么能用这个来做呢。