我正在研究概念验证项目。这是使用UITableView来显示一些实时数据。 “实时数据”正在与应用程序中的实时传感器信息进行合并。带有实时数据的UITableView也具有用户交互同时
在用一些NSMutableArray数据呈现UITableView后,NSMutableArray每1秒更新一次传感器数据appprox,同时UITableView也有用户交互。
我的问题是,根据上述,什么是最好的方法消耗UITableView的实时数据?
任何建议,样本将不胜感激。
我正在研究概念验证项目。这是使用UITableView来显示一些实时数据。 “实时数据”正在与应用程序中的实时传感器信息进行合并。带有实时数据的UITableView也具有用户交互同时
在用一些NSMutableArray数据呈现UITableView后,NSMutableArray每1秒更新一次传感器数据appprox,同时UITableView也有用户交互。
我的问题是,根据上述,什么是最好的方法消耗UITableView的实时数据?
任何建议,样本将不胜感激。
在苹果文档中的SeismicXML parser sample code做了类似的事情。它从服务器获取有关地震的“生活”(即更改)信息,并在新信息到达时通过NSNotification更新数据源。 UITableView根据NSMutableArray更改时的键值观察重新加载其数据。重载是用[tableView reloadData]完成的。
还有用户与表格的交互:用户可以选择一个tableViewCell并选择按照链接进一步的信息。
如果您担心控制协调:您想要避免的是用户点击表格,dataArray被更改,并且-tableView:didSelectRowAtIndexPath:
方法尝试同时访问数据。有两种选择:在数据更新期间阻止表中的选择,或在行选择发生时阻止数据更新。
您可以通过设置tableView.allowsSelection=NO
来阻止与表格的交互。通过使用键值观察选项:NSKeyValueObservingOptionPrior
可以找出数据何时要更新。这种方法通常会失去点,因为你可能会打断用户想要做的事情。
另一种选择是通过设置几个布尔值来延迟数据更新:isSelecting和dataNeedsReloading。流将是这样的: 用户轻敲桌子,isSelecting=YES
如果新的数据进来,
if (isSelecting) {
[tempArray addObject:newData];
dataNeedsReloading=YES;
}
然后在选择过程完成后,重新isSelecting=NO
,检查dataNeedsReloading
标志,结合阵列和重新加载表如果需要的话。完成后,重置dataNeedsReloading=NO
。还用-removeAllObjects
重置tempArray。
无论何时可以从传感器获得新数据,在主线程上调用addData方法。
-(void) addData:(NSString*)newDataFeild{
@synchronized(self){
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:[_data count] inSection:0];
[_data addObject:line];
[self reloadData];
[self scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:NO];
}
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
cell.textLabel.text = [_data objectAtIndex:indexPath.row];
return cell;
}
苏兹的答案应该适合你。 –
是的,我明白了。谢谢糖。 – fyasar