2015-04-04 66 views
1

我已經在我的屏幕上添加了微調,但它不顯示。這裏是我的代碼暫停微調和播放微調微調不能在swift中工作

func pause() { 
    activityIndicator = UIActivityIndicatorView(frame: CGRectMake(0, 0, 50, 50)) 
    activityIndicator.center = self.view.center 
    activityIndicator.hidesWhenStopped = true 
    activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.Gray 
    view.addSubview(activityIndicator) 
    activityIndicator.startAnimating() 
    UIApplication.sharedApplication().beginIgnoringInteractionEvents() 
} 

這裏是我的恢復方法

func restore() { 
    activityIndicator.stopAnimating() 
    UIApplication.sharedApplication().endIgnoringInteractionEvents() 
} 

我宣佈我的微調只是類

var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView() 

這裏面是哪裏我打電話spinner

override func viewDidLoad() { 

    // myarray = [""] 
    // var take = NSMutableArray 

    pause() 
    var query = PFQuery(className:"Questions") 
    query.whereKey("Level", equalTo:level) 
    query.whereKey("Quiz", equalTo:quiz) 
    query.orderByAscending("Ques") 

    query.findObjectsInBackgroundWithBlock { 
     (objects: [AnyObject]!, error: NSError!) -> Void in 
     if error == nil { 
      // The find succeeded. 
      println("Successfully retrieved \(objects.count) scores.") 

      var i = 0; 

      if let objects = objects as? [PFObject] { 
       for object in objects { 
        println(object.objectId) 
        let pf = object as PFObject 
        let name = pf["Question"] as String 
        ql.append(name) 
        if (flag1 == 0){ 
        myarr.insert(name, atIndex: i) 
        i++; 
        } 

       } 
      } 
      println(myarr); 
     } else { 
      // Log details of the failure 

      println("Error: \(error) \(error.userInfo!)") 
      self.performSegueWithIdentifier("error", sender: self) 
      let defaults = NSUserDefaults.standardUserDefaults() 
      defaults.setBool(false,forKey:"l"+String(level)+"q"+String(quiz)) 
      defaults.setBool(false,forKey:"l"+String(level)+"p") 
     } 
     dispatch_async(dispatch_get_main_queue(), { 
      self.restore() 
     }) 

    } 
    if (flag1==0){ 
     ques = 1 
    } 
    questions() 
    println(ql) 


    super.viewDidLoad() 

//加載視圖後執行其他任何設置。 }

回答

1

您的(可能是長時間運行)查詢作爲後臺任務運行,因此您的restore()將立即被調用。你必須改變兩兩件事:

  1. 把您的來電restore()後臺執行塊
  2. 守「法」在頭腦中:更新UI元素,必須在主線程來完成

因此,對於2.你必須在主線程包restore()

dispatch_async(dispatch_get_main_queue(), { 
    restore() 
}) 
+0

我添加的代碼,仍然不能正常工作,更新代碼 – 2015-04-04 11:04:40

+0

你移動代碼塊在你的背景塊? – zisoft 2015-04-04 11:05:23

+0

更新了代碼 – 2015-04-04 11:11:13

0

您的活動指示符以您的pause函數開頭,並以您的restore函數結束。在viewDidLoad中,大部分工作由您定義的塊執行,並在後臺運行。從pauserestore的時間會很短。 restore會在塊完成執行之前運行很久。

如果你想微調運行,直到塊finshes,你需要做的是這樣

println("Successfully retrieved \(objects.count) scores.") 
restore() 

您的塊中。但是,請注意,我不確定您的代碼塊執行的線程是什麼,我不確定從後臺線程調用restore是否正確。你可以試試它。