开发者

Update tableview with regular time intervals in iphone

I have created a sample application. It has fetched data from server for every 1 sec and updated the result in UITableView. I had already done. But it crashes my app rapidly. What I do is call NSTimer every sec.

timer = [NSTimer scheduledTimerWithTimeInterval:1
                                         target:self 
                                       selector:@selector(MainLoop) 
                                       userInfo:nil repeats:YES];

In that timer function i have called NSThread function.

-(void)MainLoop
{
  if(isPreviousThreadFinished)
  {
    NSLog(@"Thread Opened");
   开发者_运维知识库 isPreviousThreadFinished = NO;
    [NSThread detachNewThreadSelector:@selector(MainLoopThread) toTarget:self  withObject:nil];
  }
}



-(void)MainLoopThread
{

MainLoopPool=[[NSAutoreleasePool alloc]init];

//Get data from the server

[self performSelectorOnMainThread:@selector(UpdateTable) withObject:nil waitUntilDone:YES];


[MainLoopPool release];
}

-(void)UpdateTable
{
    [self.tableView reloadData];
    isPreviousThreadFinished = YES;
    NSLog(@"Thread closed");

}

It works fine. And reloads data correctly from the server. I stop NSTimer in viewWillDisappear method. When I go to previous page sometimes it crashes application. In console i have seen the error is given below,

bool _WebTryThreadLock(bool), 0xb2aa410: Tried to obtain the web lock from a thread other than the main thread or the web thread. This may be a result of calling to UIKit from a secondary thread. Crashing now...

What is wrong with my code? Crashes appear randomly.


When I work on my application I discovered very good thing - NSOperation. It's thread safe. You can simply add you operations to the queue without fear to crash. There are a lot of tutorials about NSOperation

http://www.icodeblog.com/2010/03/04/iphone-coding-turbo-charging-your-apps-with-nsoperation/ http://www.cimgf.com/2008/02/16/cocoa-tutorial-nsoperation-and-nsoperationqueue/

I strongly recommend you use NSOperation-s instead of threads in your project.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜