从NSOperation调用时,UITableView会休眠

时间:2011-01-29 15:11:53

标签: iphone timeout uitableview nsoperation

我正在编写一个应用程序,只要用户点击重新加载按钮,就需要从网站上获取内容。

如果他这样做,则NSOperation会被注册并交给NSOperationQueue。

当NSOperation启动(START QUEUE)时,它会检查其缓存并从服务器重新加载数据(CALL IMPORT1)。
执行此任务后,操作会向我的UITableView发送通知,该通知查询数据库(START READING / END READING)然后调用[self.tableView reloadData];(RELOAD DATA START)
直到这里一切都按预期工作。即使我导入约1.000个元素。

让我疯狂的事情是,在“END QUEUE”和获得第一个单元格(CREATE CELL START)之间会有某种睡眠。在这个睡眠之后,细胞按原样产生 - 非常快。

我无法弄清楚是什么调用了这个“睡眠”。

任何人都可以给我一个暗示会出错的提示。

先谢谢鲍里斯

在viewDidAppear中调用

  

2011-01-29 15:54:34.460 [30488:207]   开始阅读2011-01-29   15:54:34.461 [30488:207]结束阅读
  2011-01-29 15:54:34.464 [30488:207]   RELOAD DATA START 2011-01-29   15:54:34.468 [30488:207]获取部分   2011-01-29 15:54:34.469 [30488:207]   GET HEADER 2011-01-29 15:54:34.470   [30488:207] GET HEADER 2011-01-29   15:54:34.470 [30488:207] GET ROWS
  2011-01-29 15:54:34.471 [30488:207]   创建CELL START 2011-01-29   15:54:34.473 [30488:207]创建细胞   STOP 2011-01-29 15:54:34.474   [30488:207]创建CELL START
  2011-01-29 15:54:34.475 [30488:207]   创建细胞停止2011-01-29   15:54:34.476 [30488:207]创建细胞   START 2011-01-29 15:54:34.477   [30488:207]创建细胞停止
  2011-01-29 15:54:34.477 [30488:207]   GET HEADER

通过通知调用(由于NSOperation,粗体部分是新的)

  

2011-01-29 15:54:04.719 [30488:630b] START QUEUE 2011-01-29 15:54:05.727   [30488:630b] CALL IMPORT1 START
  2011-01-29 15:54:05.750 [30488:630b]   CALL IMPORT1 STOP 2011-01-29   15:54:05.760 [30488:630b] CALL VIEW   开始
2011-01-29 15:54:05.767   [30488:630b]开始阅读   2011-01-29 15:54:05.771 [30488:630b]   结束阅读2011-01-29 15:54:05.781   [30488:630b] RELOAD DATA START
  2011-01-29 15:54:05.786 [30488:630b]   获取部分2011-01-29 15:54:05.791   [30488:630b] GET HEADER 2011-01-29   15:54:05.797 [30488:630b] GET HEADER
  2011-01-29 15:54:05.802 [30488:630b]   GET ROWS
   2011-01-29 15:54:05.806 [30488:630b] CALL VIEW STOP 2011-01-29   15:54:05.811 [30488:630b] END QUEUE   2011-01-29 15:54:10.770 [30488:630b]   创建CELL START 2011-01-29   15:54:10.776 [30488:630b]创建细胞   STOP 2011-01-29 15:54:10.777   [30488:630b]创建CELL START
  2011-01-29 15:54:10.778 [30488:630b]   创建细胞停止2011-01-29   15:54:10.778 [30488:630b]创建细胞   START 2011-01-29 15:54:10.780   [30488:630b]创建细胞停止
  2011-01-29 15:54:10.781 [30488:630b]   GET HEADER

1 个答案:

答案 0 :(得分:0)

找到解决方案...... NSOperation将辅助线程上的NSNotification发送到我的UITableViewController - 这会导致延迟。

我在这个网站上找到了解决方案: http://cocoawithlove.com/2009/08/safe-threaded-design-and-inter-thread.html

希望这是我的帮助!