【问题标题】:Activity Indicator is not showed when loading large amount of data from sqlite database从 sqlite 数据库加载大量数据时不显示活动指示器
【发布时间】:2012-09-25 12:31:02
【问题描述】:

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

【问题讨论】:

    标签: ios sqlite uiactivityindicatorview


    【解决方案1】:

    首先,您不需要为 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 以首先检查它实际上是动画。

    【讨论】:

    • 我正在异步执行 '[activityIndi​​cator startAnimating];数组 = [SQLite getDataFromDB]; [activityIndi​​cator stopAnimating];'
    • 不用担心,很高兴我能帮上忙。
    【解决方案2】:

    @Fogmeister 擅长设置 activityIndi​​cator 的框架。

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

    快乐编码:)

    【讨论】:

      【解决方案3】:

      这样做:

      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-07-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-19
        • 1970-01-01
        相关资源
        最近更新 更多