【问题标题】:Iboutlets not working inside block swiftIboutlets 不能在块 swift 内工作
【发布时间】:2015-07-08 10:02:03
【问题描述】:

我正在从服务器获取请求并尝试在 tablview 中显示它。在这个过程中,我想在获取记录后隐藏微调器。 问题是:与块内的 self 相关的任何东西都不起作用。

@IBOutlet weak var spinner: UIActivityIndicatorView!
@IBOutlet weak var customTableview: CustomTableView!
var widgetArray :NSMutableArray = []
override func viewDidLoad() {
    super.viewDidLoad()

    print(DataObjects.sharedInstance.mainArray)
    let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate

     spinner.hidden = false
    spinner.startAnimating()

    CustomNetworkHit.networkHitForUrl("http://winjitwinds.cloudapp.net/windapi/windapiservice.svc/getcategorydatapagewise?categoryid=1944&pageno=1", completion: {(arrayResult) -> Void in

        // spinner does not stop animating and it does not hide

        self.spinner.stopAnimating()
        self.spinner.hidden = true
        print("Disable the spinner man")
        DataObjects.sharedInstance.mainArray.addObjectsFromArray(arrayResult as [AnyObject])
        self.widgetArray.addObjectsFromArray(arrayResult as [AnyObject])
        self.customTableview.setUpTableView(self.widgetArray)

        // UItableview Does not reload Data.

        self.customTableview.reloadData()


    })

【问题讨论】:

标签: swift block self


【解决方案1】:

请具体说明“不起作用”的含义。没有它就很难确定,但我猜你正在尝试在后台线程上进行 UI 工作(块不在主线程上运行)。

在你的区块内试试这个:

dispatch_async(dispatch_get_main_queue(), ^(){
    // UI CODE GOES HERE
});

在斯威夫特中:

dispatch_async(dispatch_get_main_queue()) {
   // UI CODE GOES HERE
}

【讨论】:

  • 不起作用意味着..使用 self.spinner.hidden = true 不会隐藏微调器。我认为这是弱自我的问题,但仍然没有得到如何迅速声明。
  • UIKit 不是线程安全的,块不在主线程上运行。如果您将 UI 代码放入我提供的示例中,它将起作用。弱自我只会阻止保留周期。
  • 谢谢伙计。但它总是在 Objective-C 中工作,而不是在主线程上。
猜你喜欢
  • 2016-11-28
  • 2011-05-18
  • 1970-01-01
  • 2017-06-20
  • 1970-01-01
  • 2016-04-07
  • 2013-01-17
  • 2017-01-26
  • 1970-01-01
相关资源
最近更新 更多