从sqlite数据库加载大量数据时,不显示活动指示符

时间:2012-09-25 12:31:02

标签: ios sqlite uiactivityindicatorview

在我的应用中,我从数据库中获取数据。我从数据库获得的数据非常大,如20000条记录。所以,我想显示一个活动指示器来指示数据正在加载。但是当我运行应用程序时,活动指示器没有显示。

我为此发送代码。请帮帮我。

activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];

activityIndicator.frame = CGRectMake(100,100, 20, 20);
[self.view addSubview:activityIndicator];

[activityIndicator startAnimating];

// Code to get data from database

[activityIndicator stopAnimating];

3 个答案:

答案 0 :(得分:3)

首先,您不需要为activiyIndi​​cator设置框架。你可以设置中心......

activityIndicator.center = self.view.center; (or soemthing like this).

其次,您如何检索数据?你是在主线上做的吗?或者你是异步做的吗?

:: EDIT ::

啊,看来你正在这样做......

[actInd startAnimating];
[self getData];  //this is asynchronous
[actInd stopAnimating];

如果是这种情况,则几乎立即调用stopAnimating。

你需要的是这样......

[actInd startAnimating];
[self getData];  //this is asynchronous

然后在getData ...

- (void)getData
{
    //get all your data and process it....

    [actInd stopAnimating];
}

这样,只有在完成所有数据工作后才会调用停止动画。

如果这不起作用,请尝试完全删除stopAnimating以检查它实际上是否为动画。

答案 1 :(得分:0)

这样做:

activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
activityIndicator.center = self.view.center; 
[self.view addSubview:activityIndicator];
[NSThread detachNewThreadSelector:@selector(startActivityIndicator) toTarget:self withObject:nil];

添加此方法:

-(void)startActivityIndicator
{
  NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
  [activityIndicator startAnimating];
  [pool release];
}

进行更改:

- (void)getData
{
  //get all your data from database.
  [activityIndicator stopAnimating];
}

答案 2 :(得分:0)

@Fogmeister是关于设置activityIndi​​cator框架的。

并且为了显示activityIndi​​cator,只需创建问题中显示的代码的一个函数,并使用performSelector:withObject:afterDelay:调用它,延迟为0.001,并显示activityIndi​​cator

快乐编码:)