1

在我的应用程序中,我从数据库中获取数据。我从数据库中获得的数据非常大,比如 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];
4

3 回答 3

3

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

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

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

::编辑::

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

[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 以首先检查它实际上是动画。

于 2012-09-25T12:33:55.217 回答
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];
}
于 2012-09-25T12:38:06.000 回答
0

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

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

快乐编码:)

于 2012-09-25T12:42:32.920 回答