加载数据时如何显示UIActivityIndicationView
|
我试图在viewDidLoad中加载数据时显示一个指标视图,但是加载是在显示指标之前开始的,我想这是因为该视图直到之后才加载。我已经阅读了一些有关此内容,但无法使其正常工作。
我想要的是在将文件加载到数据库期间显示活动指示器。
我一直在进行测试,因此代码结构可能看起来有些怪异。
有人可以请给我一个提示或链接,如何解决此问题,以便在/是否将数据从.txt文件加载到数据库时显示活动指示符?
- (void)viewDidLoad {
[super viewDidLoad];
self.title = @\" \";
loadActivityIndicator.hidden = TRUE; // Hide UIActivityIndicationView at start
[self loadDataIfNeeded];
}
-(void)loadDataIfNeeded {
NSFileManager *fileManager = [NSFileManager defaultManager];
myFileArray = [[NSMutableArray alloc]init];
//======SET THE FILE INPUT NAME======//
qFileTxtName = @\"110615\";
[myFileArray addObject:qFileTxtName];
//===================================//
// CHECK IF THE FILE EXISTS
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@\"checkQuestionFile.plist\"];
if([fileManager fileExistsAtPath:path]) {
NSArray *readKeyFileName = [[NSArray alloc] initWithContentsOfFile:path];
if ([[readKeyFileName objectAtIndex:0] isEqualToString:qFileTxtName]) {
//==== THERE IS NO UPDATED QUESTION .txt FILE ====//
}
else {
//==== THERE IS AN UPDATED QUESTION .txt FILE ====//
// SET UP UIActivityIndicator view to show that work is ongoing
loadActivityIndicator.hidden = FALSE;
[loadActivityIndicator startAnimating];
//==== SET UP PATH FOR ALL FILES====//
NSString *aString = [[NSString alloc]init];
aString = [@\"questions_famquiz_hard_\" stringByAppendingString:qFileTxtName];
NSString *path1 = [[NSBundle mainBundle] pathForResource:aString ofType:@\"txt\"];
aString = [@\"questions_famquiz_medium_\" stringByAppendingString:qFileTxtName];
NSString *path2 = [[NSBundle mainBundle] pathForResource:aString ofType:@\"txt\"];
aString = [@\"questions_famquiz_easy_\" stringByAppendingString:qFileTxtName];
NSString *path3 = [[NSBundle mainBundle] pathForResource:aString ofType:@\"txt\"];
AccessQuestionsDB *accessQuestionDataFunction = [AccessQuestionsDB new];
idCounter = [accessQuestionDataFunction populateTheDatabase: path1 theID:0 firstTime: YES];
idCounter = [accessQuestionDataFunction populateTheDatabase: path2 theID:idCounter firstTime: NO];
idCounter = [accessQuestionDataFunction populateTheDatabase: path3 theID:idCounter firstTime: NO];
//==UPDATE THE PLIST==//
[myFileArray writeToFile:path atomically: TRUE];
// Stop UIActivityIndicator as activity is over
loadActivityIndicator.hidden = TRUE;
[loadActivityIndicator stopAnimating];
}
} else {
//== If file not found write a new file ==//
[myFileArray addObject:qFileTxtName];
[myFileArray writeToFile:path atomically: TRUE];
}
}
问题解决了
我接了电话
[self loadDataIfNeeded];
与
[NSThread detachNewThreadSelector:@selector(loadDataIfNeeded)toTarget:self withObject:nil];
根据乔纳(Jonah)的建议实现多线程:-)
没有找到相关结果
已邀请:
3 个回复
扑北爱
方法完成后才有机会更新视图(此时,您不希望显示自己的活动)指示器仍然可见)。 在主线程上显示活动指示器,然后允许主线程的运行循环继续进行,而是在辅助线程上异步执行昂贵的操作(如加载数据或执行网络请求)。 在
,
\的ѭ4and和
中查找用于从主线程执行任务的不同选项。
咳累录酬
队辅坟阮阶
然后,在完成加载后的加载方法中,只需从超级视图中删除活动指示器即可。 所以在加载后在您的loadDataIfNeeded中添加