我有一个NSMutableArray和我从它加载我的tableview。现在我在这有点让用户刷新进入阵列多次数据的UI的按钮。 而每次有在我要刷新的tableView阵列的新数据。 只是做[的tableView reloadData]更新后阵似乎弹出的皮球。 什么将是实现这一目标的好办法什么想法吗?

此外,我一直在考虑看看绑定的方式来从一个数组实现我NSTableView的,但显示在线使用绑定所有的例子,当他们想要将数据添加到自己的表? 任何人都可以点我对我怎么可能有数据的数组加载到使用绑定的tableView?

很抱歉,如果问题是noobie的,我愿意看,如果有人可以点我到正确的数据。谢谢:)(我不是在寻找一个快捷方式,只是想从对如何处理这些事情经历人得到一些教训的建议)

-(IBAction)refreshList:(id)sender
{
//setup array here and sort the array based on one column. This column has 
  identifier 'col1' and it works as expected


[aTable reloadData];
  } 

- (int) numberOfRowsInTableView:(NSTableView *)aTable
{ // return count of array
 }

- (id)tableView:(NSTableView *)aTable objectValueForTableColumn: (NSTableColumn *)          
tableColumn row:(int)row
 { 
 //set up arrays here to load data in each column


 }
- (void)tableView:(NSTableView *)aTableView sortDescriptorsDidChange:(NSArray   
 *)oldDescriptors
 {
 //sort here when column headers are clicked
 } 

 -(IBAction)autorefresh:(id)sender
   {

 // Here i am trying to reload the array and refresh the tableView. I want to       
  constantly keep refreshing the array and loading the tableView here. The array does 
  get   refreshed but I am having trouble loading the tableView.


  for ( int i =0; i<=2;i++)
  { 
     // reload the array with data first.
  [aTable reloadData];
    i = 1;

  } 
有帮助吗?

解决方案

通过代码(尤其是你很新颖“而真正的”循环),你会得到一个沙滩球,因为你永远不会回到人跑环。要解决使用这样的代码建立NSTableView的后,它会运行每1.0秒。

NSTimer* timer = [NSTimer timerWithTimeInterval:1.0
                                         target:[NSApp delegate]
                                       selector:@selector(myReloadData:)
                                       userInfo:nil
                                        repeats:YES];

[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];  

然后,在应用程序委托创建myReloadData

- (void)reloadMyData:(NSTimer*)ntp
{
  // reload the array with data first.
  [aTable reloadData];
}

其他提示

如果-reloadData是造成皮球几乎肯定意味着有什么不对您的控制器的实施NSTableDataSource协议。你需要找出为什么发生这种情况,并修复它。如果您发布表数据的源代码,那么也许我们可以帮助你的工作这是为什么。

我强烈建议你熟悉甚至看着绑定前的“标准” NSTableView数据源和委托方法。 Cocoa绑定是一个比较高级的主题,它非常听起来像您需要更基本的可可经验,你移动到绑定之前。

这就是说,当前页有一个全面的Cocoa绑定示例:

http://homepage.mac.com/mmalc/CocoaExamples/controllers.html

因为你发布你的代码更新:

我要假设你故意留出的在上面的代码中的数据源方法的实现,因为代码为您发布它不会没有警告的编译。

您自动刷新方法是一个无限循环。这就解释了beachballing。你在环路,这意味着永远不会被达到结束条件的每一次迭代设置i为1。

然而,使用for环等,这是刷新表格视图,将阻止主线程一个可怕,可怕的方式。如果需要重复更新定期表视图,使用被称为在一个指定的时间间隔的NSTimer

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top