2015-06-17 102 views
0

我正在使用Parse將數據加載到我的Today Extension中,然後更新我的Widget文本字段。今天的擴展名「無法加載」

當我運行我的代碼似乎沒有問題,實際上調試我的擴展中的代碼我將該函數複製到我的主應用程序,並運行它,所以我可以看到輸出(我知道這是可能的調試窗口小部件但它似乎是一個非常混亂和麻煩的過程)。所有的輸出都是正確的,所以當我的Widget無法正常工作時,我完全傻眼了。

我認爲它沒有在我的小部件擴展中工作,因爲我在我的小部件視圖中得到「無法加載」文本字段。

我使用的功能稱爲「update_widget」,我稱之爲「update_widget」在「super.viewDidLoad()」在我的窗口小部件「TodayViewController」

難道我更新我的插件在錯誤的方式?

任何想法爲什麼這可能是?

「TodayViewController.swift」的代碼如下。假設解析ID和查詢ID是正確的,而不是「HiFriends」。假設Day類被寫入並正常工作。最後請記住,如果我在主應用程序「AppDelegate.swift」中粘貼「update_widget」,則所有輸出都是正確的,並且不會崩潰。挖掘。

此外,如果它有幫助,我注意到,在顯示「無法加載」之前,小部件顯示「加載」,我在「update_widget」函數查詢之前打印。

// 
    // TodayViewController.swift 
    // WidgetExtention 
    // 
    // Created by Vishnu Murale on 6/9/15. 
    // Copyright (c) 2015 Vishnu Murale. All rights reserved. 
    // 

    import UIKit 
    import NotificationCenter 
    import Parse 


    class TodayViewController: UIViewController, NCWidgetProviding { 

@IBOutlet weak var WidgetText: UILabel! 
let BlockOrder = ["A","B","C","D","E","F","G"] 


var Schedule = PFObject(className:"Schedule") 
let defaults = NSUserDefaults.standardUserDefaults() 

override func viewDidLoad() { 
    super.viewDidLoad() 


    Parse.setApplicationId("HiFriends", 
     clientKey: "HiFriends") 

    self.update_widget() 


} 

func find_Minutes(hour_before : Int, hour_after : Int)->Int{ 


    var num_hours_less = Int(hour_before/100) 
    var num_hours_more = Int(hour_after/100) 

    var diff_hours = num_hours_more-num_hours_less 

    var diff_minutes = hour_after%100 - hour_before%100 


    return diff_hours*60 + diff_minutes; 


} 




override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

func substring(origin :String, StartIndex : Int, EndIndex : Int)->String{ 
    var counter = 0 
    var subString = "" 
    for char in origin{ 

     if(StartIndex <= counter && counter < EndIndex){ 
      subString += String(char) 
     } 

     counter++; 

    } 

    return subString 

} 

func widgetPerformUpdateWithCompletionHandler(completionHandler: ((NCUpdateResult) -> Void)!) { 

    } 


func update_widget() -> Bool{ 




    var Success = false; 

    var Days = [Day]() 


    var query = PFQuery(className:"Schedule") 

    self.WidgetText.text = "Loading" 

    query.getObjectInBackgroundWithId("HiFriends") 
     { 
      (SchedObj: PFObject?, error: NSError?) -> Void in 
      if error == nil && SchedObj != nil { 
       var Widget_Block = [Array<String>]() 
       var Time_Block = [Array<String>]() 
       Widget_Block.removeAll() 
       Time_Block.removeAll() 
       println("Retrived Information Successful") 


       self.Schedule = SchedObj! 
       print(self.Schedule) 
       var Monday = Day(name:"Monday") 
       var Tuesday = Day(name:"Tuesday") 
       var Wednesday = Day(name:"Wednesday") 
       var Thursday = Day(name:"Thursday") 
       var Friday = Day(name:"Friday") 
       if(self.Schedule["MondayBlock"] != nil && self.Schedule["MondayTime"] != nil){ 
        var bO: Array<String> = self.Schedule["MondayBlock"] as! Array<String> 
        var t: Array<String> = self.Schedule["MondayTime"] as! Array<String> 
        Widget_Block.append(bO) 
        Time_Block.append(t) 
        Monday.refreshDay(bO, times: t) 
       } 
       if(self.Schedule["TuesdayBlock"] != nil && self.Schedule["TuesdayTime"] != nil){ 
        var bO: Array<String> = self.Schedule["TuesdayBlock"] as! Array<String> 
        var t: Array<String> = self.Schedule["TuesdayTime"] as! Array<String> 
        Widget_Block.append(bO) 
        Time_Block.append(t) 
        Tuesday.refreshDay(bO, times: t) 
       } 
       if(self.Schedule["WednesdayBlock"] != nil && self.Schedule["WednesdayTime"] != nil){ 
        var bO: Array<String> = self.Schedule["WednesdayBlock"] as! Array<String> 
        var t: Array<String> = self.Schedule["WednesdayTime"] as! Array<String> 
        Widget_Block.append(bO) 
        Time_Block.append(t) 
        Wednesday.refreshDay(bO, times: t) 
       } 
       if(self.Schedule["ThursdayBlock"] != nil && self.Schedule["ThursdayTime"] != nil){ 
        var bO: Array<String> = self.Schedule["ThursdayBlock"] as! Array<String> 
        var t: Array<String> = self.Schedule["ThursdayTime"] as! Array<String> 
        Widget_Block.append(bO) 
        Time_Block.append(t) 
        Thursday.refreshDay(bO, times: t) 
       } 
       if(self.Schedule["FridayBlock"] != nil && self.Schedule["FridayTime"] != nil){ 
        var bO: Array<String> = self.Schedule["FridayBlock"] as! Array<String> 
        var t: Array<String> = self.Schedule["FridayTime"] as! Array<String> 
        Widget_Block.append(bO) 
        Time_Block.append(t) 
        Friday.refreshDay(bO, times: t) 
       } 
       Days.append(Monday) 
       Days.append(Tuesday) 
       Days.append(Wednesday) 
       Days.append(Thursday) 
       Days.append(Friday) 
       var currentDateTime = Monday.getDate_AsString() 
       var Day_Num = Monday.getDayOfWeek_fromString(currentDateTime) 
       var User_Info = [String]() 
       let defaults = NSUserDefaults.standardUserDefaults() 
       if(defaults.objectForKey("ButtonTexts") != nil){ 
        User_Info = defaults.objectForKey("ButtonTexts") as! Array<String> 
       } 
       var Switch_Info = [Bool]() 
       if(defaults.objectForKey("SwitchValues") != nil){ 
        Switch_Info = defaults.objectForKey("SwitchValues") as! Array<Bool> 
       } 
       println("") 
       println("Finding Widget Date ...") 
       var End_Times = [Int]() 
       if(self.Schedule["EndTimes"] != nil){ 
        End_Times = self.Schedule["EndTimes"] as! Array<Int> 
       } 


       var minutes_until_nextblock = 0; 
       var blockName_Widget = " " 

       if(Day_Num >= 0 && Day_Num <= 4){ 

        for i in reverse(0...Widget_Block[Day_Num].count-1){ 



         var dateAfter = Time_Block[Day_Num][i] 
         var CurrTime = Monday.NSDateToStringWidget(NSDate()) 
         var End_Time_String = "" 
         if(i+1 <= Widget_Block[Day_Num].count-1){ 
          End_Time_String = Time_Block[Day_Num][i+1] 
         } 

         println("Date After : " + dateAfter) 
         println("Current Date : " + CurrTime) 

         var hour4 = self.substring(dateAfter,StartIndex: 1,EndIndex: 3) 
         hour4 = hour4 + self.substring(dateAfter,StartIndex: 4,EndIndex: 6) 

         var hour2 = self.substring(CurrTime,StartIndex: 1,EndIndex: 3) 
         hour2 = hour2 + self.substring(CurrTime,StartIndex: 4,EndIndex: 6) 

         var end_time = self.substring(End_Time_String,StartIndex: 1,EndIndex: 3) 
         end_time = end_time + self.substring(End_Time_String,StartIndex: 4,EndIndex: 6) 


         var hour_one = hour4.toInt() 
         var hour_two = hour2.toInt() 
         var hour_after = end_time.toInt() 


         println("Blcok Date hour : ") 
         print(hour_one) 
         println("Current Date hour: ") 
         print(hour_two) 
         println("After Date hour : ") 
         println(hour_after) 



         if(i == Widget_Block[Day_Num].count-1 && hour_two >= hour_one){ 

          var EndTime = End_Times[Day_Num] 
          if(hour_two! - EndTime < 0){ 


           minutes_until_nextblock = self.find_Minutes(hour_two!, hour_after: (EndTime-5)) 

           println("Miuntes until next blok " + String(minutes_until_nextblock)) 
           if(minutes_until_nextblock > 0){ 
            blockName_Widget = Widget_Block[Day_Num][i] 
           } 
           else{ 
            blockName_Widget = "GETTOCLASS" 
           } 
          } 
          else{ 
           println("After School") 
           blockName_Widget = "NOCLASSNOW" 
          } 

          break; 

         } 


         if(hour_two >= hour_one){ 


          minutes_until_nextblock = self.find_Minutes(hour_two!, hour_after: (hour_after!-5)) 

          println("Miuntes unitl next block " + String(minutes_until_nextblock)) 

          if(minutes_until_nextblock > 0){ 

           blockName_Widget = Widget_Block[Day_Num][i] 
          } 
          else{ 
           blockName_Widget = "GETTOCLASS" 
          } 

          break; 
         } 

        } 

       } 

       if(blockName_Widget == " "){ 

        blockName_Widget = "NOCLASSNOW" 

       } 



       println("Found the block name Widget " + blockName_Widget) 

       if(blockName_Widget == "NOCLASSNOW"){ 



        println("NO Class Now") 


       } 
       else if(blockName_Widget == "GETTOCLASS"){ 

        println("Passing Time") 

       } 
       else{ 

        var firstLunch = Switch_Info[Day_Num] 

        for (date,block) in Days[Day_Num].time_to_block{ 
         var message = block; 
         var block_copy = block; 





         if(count(block_copy) == 2) { 

          if(firstLunch && block_copy.hasSuffix("1")){ 


           message = "Lunch" 



          } 
          else if(!firstLunch && block_copy.hasSuffix("2")){ 

           message = "Lunch" 


          } 
          else{ 

           var counterDigit = 0; 

           for i in block_copy{ 

            if(counterDigit == 0){ 
             block_copy = String(i) 
            } 

            counterDigit++; 

           } 



          } 
         } 



         if(find(self.BlockOrder,block_copy) != nil){ 

          var indexOfUserInfo = find(self.BlockOrder,block_copy)! 

          if(User_Info[indexOfUserInfo] != ""){ 
           message = User_Info[indexOfUserInfo] 

          } 
         } 


         if(block == blockName_Widget){ 
          println("have found widget block " + block) 
          println("Message on Widget " + message) 
          self.WidgetText.text = message 
          break; 


         } 

        } 

       } 




       Success = true; 





      } else { 


       println("Information not received succesfully") 
      } 
    } 
    return Success 
} 

}

+1

我建議,不要告訴我們有關您的代碼的故事,而是發佈實際無法使用的代碼和儘可能多的診斷信息。 – nhgrif

+0

這個東西是函數工作中的代碼,因爲它在我的「AppDelegate」中起作用,所以它不能是源自函數的錯誤。會看到我的「TodayViewController」幫助嗎? @nhgrif –

+0

這是一個開始,是的。 – nhgrif

回答

0

到底錯誤是很簡單:我忘了,爲了我的主要應用和窗口小部件我之間的交流,我需要在包括NSUserDefaults的套件名稱。小部件不斷收到空對象並崩潰。