我有一个本地SQLite数据库,需要返回大量记录。加载需要几秒钟,所以我想添加一个活动指示器。活动指示器似乎正在运行,但问题是池不允许数组返回任何值,见下文。
- (void)viewDidLoad
{
[super viewDidLoad];
activityIndicator = [[[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray] autorelease];
activityIndicator.frame = CGRectMake(0.0, 0.0, 48.0, 48.0);
activityIndicator.center = self.view.center;
[self.view addSubview:activityIndicator];
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
[activityIndicator startAnimating];
[self performSelectorInBackground:@selector(loadData) withObject:nil];
}
//What I need to load from SQLITE
-(void)loadData {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; // Path to the database
//CODED HERE FOR DATABASE TO OPEN AND QUERY HERE TO BUILD ARRAYS
NSString *firstField = [NSString stringWithUTF8String:cFirst];
NSString *secondField = [NSString stringWithUTF8String:cSecond];
NSString *thirdField = [NSString stringWithUTF8String:cThird];
[FirstArray addObject:firstField];
[SecondArray addObject:secondField];
[ThirdArray addObject:thirdField];
//Checking to see if records are being added to the arrays
NSString *recordAdded = [NSString stringWithFormat:@"%@ - %@ - %@", firstField, secondField, thirdField];
NSLog(@"Song: %@", recordAdded);
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
[activityIndicator stopAnimating];
[pool release];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
NSString *firstValue = [firstArray objectAtIndex:indexPath.row];
NSString *secondValue = [secondArray objectAtIndex:indexPath.row];
NSString *thirdValue = [thirdArray objectAtIndex:indexPath.row];
NSString *details = [NSString stringWithFormat:@"%@ - %@", secondValue, thirdValue];
cell.textLabel.text = cellValue;
cell.detailTextLabel.text = details ;
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
return cell;
}
当我查看调试器时,我看到正在构建数组,因为活动指示器正在运行。问题是我认为池版本也在发布我的阵列。
当我不添加池和活动指示符时,代码会在表视图中返回查询。
任何人都可以帮我指出正确的方向,如果这就是发生在这里的情况吗?任何形式的帮助将不胜感激。 : - )
--- ---也 环顾四周之后,我发现我必须将数组传递回主线程。这是我在线搜索收集的内容。
[self performSelectorOnMainThread:@selector(done:) withObject:cellData waitUntilDone:NO];
我如何使用这些数组加载表?
答案 0 :(得分:0)
不确定您的池是否释放阵列,您的代码似乎非常直接。您可能想要检查是否确实从数据库中获取了任何数据。
但是,我注意到您停止在后台线程中设置活动指示器的动画。 UI活动应该在主线程中完成。我昨晚做了这个编码,用thread解决了我的问题。将stop动画代码放在performSelectorOnMainThread指定的选择器中。
答案 1 :(得分:0)
字符串很好,因为它们被添加到数组中。
看起来您的阵列正在发布,但您没有显示它的代码。
你是如何创建阵列的?如果是自动释放的,则在排空池时将取消分配。你应该“保留”它而不是“auotrelease”它。
答案 2 :(得分:0)
尝试在[tableview reloadData]
-(void)loadData method