Как загрузить данные JSON на начало просмотра контроллера в Swift - PullRequest
0 голосов
/ 27 апреля 2018

Я хочу получить данные при запуске viewcontroller. каждый раз, когда открывается контроллер представления, он должен обновлять данные в соответствии с JSON. Я добавил весь код в viewDidLoad() так же, как и в viewWillAppear(), но он не загружает данные. Может ли кто-нибудь помочь мне узнать, что я могу сделать, чтобы загружать данные каждый раз, когда открывается контроллер представления.

второй вопрос: я прочитал много решений об этой ошибке: thread 1 exc_bad_instruction (code=exc_i386_invop subcode=0x0), но я не понимаю, почему я получаю эту ошибку. это происходит в @iBAction при нажатии Button, и в этом нажатии кнопки я использую делегата для передачи данных обратно к предыдущему контроллеру представления

popViewcontroller.swift:

protocol DataSendDelegate {
    func sendgetattid(pop_att_id: Int, pop_in_time: String)
}
var delegate: DataSendDelegate? = nil

if statuss == "200" {
    let send_pop_att_id = att_id
    let send_pop_in_time = in_time
    self.navigationController?.popViewController(animated: true)                                  
    self.delegate?.sendgetattid(pop_att_id: send_pop_att_id, pop_in_time: send_pop_in_time)
}

когда я получаю статус 200, он получает эту ошибку.

attendance.swift:

class attendanceViewController: UIViewController , DataSendDelegate {
    func sendgetattid(pop_att_id: Int, pop_in_time: String) {
        DispatchQueue.main.async {
            self.inTimeTextField.text = pop_in_time
            self.get_att_id = pop_att_id
            self.in_time_button.isEnabled = false
            self.out_time_button.isEnabled = true
        }
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
       if let popVC = segue.destination as? PopUpViewController {
          popVC.popEmailID = att_emp_id
          popVC.delegate = self
       }
    }
}

Ошибка:

`EmployeeAttendance [3891: 111312] Это приложение модифицирует механизм автоматической разметки из фонового потока после обращения к нему из основного потока. Это может привести к повреждению двигателя и странным сбоям.

Stack: (

0   Foundation                          0x000000010ddb980a _AssertAutolayoutOnAllowedThreadsOnly + 77

1   Foundation                          0x000000010dbc266a -[NSISEngine withBehaviors:performModifications:] + 28

2   UIKit                               0x000000010fc000e3 -[UIView(Hierarchy) _postMovedFromSuperview:] + 855

3   UIKit                               0x000000010fbfdf16 __UIViewWasRemovedFromSuperview + 169

4   UIKit                               0x000000010fbfda07 -[UIView(Hierarchy) removeFromSuperview] + 521

5   UIKit                               0x00000001107a9c5b __46-[UIInputWindowController invalidateInputView]_block_invoke + 127

6   UIKit                               0x000000010fd7a19d -[UIResponder _preserveResponderOverridesWhilePerforming:] + 125

7   UIKit                               0x00000001107a9bd3 -[UIInputWindowController invalidateInputView] + 111

8   UIKit                               0x00000001107aa59d -[UIInputWindowController changeToInputViewSet:] + 222

9   UIKit                               0x00000001107abcbc __43-[UIInputWindowController setInputViewSet:]_block_invoke_2.1494 + 39

10  UIKit                               0x00000001107a2a62 -[UIInputWindowController moveFromPlacement:toPlacement:starting:completion:] + 617

11  UIKit                               0x00000001107abc8f __43-[UIInputWindowController setInputViewSet:]_block_invoke.1493 + 97

12  UIKit                               0x000000011079b208 -[UIInputWindowController performOperations:withTemplateNotificationInfo:] + 46

13  UIKit                               0x00000001107ab81b -[UIInputWindowController setInputViewSet:] + 1336

14  UIKit                               0x00000001107a2450 -[UIInputWindowController performOperations:withAnimationStyle:] + 50

15  UIKit                               0x000000011033f118 -[UIPeripheralHost(UIKitInternal) setInputViews:animationStyle:] + 1593

16  UIKit                               0x0000000110336f4b -[UIPeripheralHost(UIKitInternal) _reloadInputViewsForResponder:] + 2163

17  UIKit                               0x0000000110340480 -[UIPeripheralHost(UIKitInternal) _preserveInputViewsWithId:animated:reset:] + 498

18  UIKit                               0x000000010fd2d94e -[UINavigationController navigationTransitionView:didStartTransition:] + 910

19  UIKit                               0x000000010fd21475 -[UINavigationController _startCustomTransition:] + 3813

20  UIKit                               0x000000010fd373b4 -[UINavigationController _startDeferredTransitionIfNeeded:] + 686

21  UIKit                               0x000000010fd386d3 -[UINavigationController __viewWillLayoutSubviews] + 150

22  UIKit                               0x000000010ff934e2 -[UILayoutContainerView layoutSubviews] + 231

23  UIKit                               0x000000010fc17a6d -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 1439

24  QuartzCore                          0x000000011661561c -[CALayer layoutSublayers] + 159

25  QuartzCore                          0x00000001166197ad _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 401

26  QuartzCore                          0x00000001165a086c _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 364

27  QuartzCore                          0x00000001165cd946 _ZN2CA11Transaction6commitEv + 500

28  QuartzCore                          0x00000001165cdfbd _ZN2CA11Transaction14release_threadEPv + 213

29  libsystem_pthread.dylib             0x0000000113c2b27e _pthread_tsd_cleanup + 534

30  libsystem_pthread.dylib             0x0000000113c2afbd _pthread_exit + 79

31  libsystem_pthread.dylib             0x0000000113c292ac _pthread_wqthread + 1613

32  libsystem_pthread.dylib             0x0000000113c28c4d start_wqthread + 13

) `

override func viewDidAppear(_ animated: Bool) {

        super.viewDidAppear(animated)

        let url = URL(string:"http://192.168.0.113/attendance/check_attend.php")

        let parameters = ["emp_id": self.att_emp_id]

        var request = URLRequest(url : url!)

        request.httpMethod = "POST"

        request.httpBody = try? JSONSerialization.data(withJSONObject:parameters, options: [])

        request.addValue("application/json", forHTTPHeaderField: "Content-Type")

        let session = URLSession.shared

        session.dataTask(with: request, completionHandler: { (data, response, error) in

            if let data = data {

                do {

                    let json = try? JSONSerialization.jsonObject(with: data, options: []) as! Dictionary<String, Any>

                    if let json = json {

                        print("HERE SHOULD BE YOUR JSON \(json)")

                        //var datas = [String:AnyObject]()

                        if let datas = json["data"] as? [String:AnyObject]  , let in_time_Str = datas["in_time"] as? String, let out_time_Str = datas["out_time"] as? String , let grace_Str = datas["grace"] as? String, let signal_Str = datas["signal"] as? String

                        {

                            print("here is attendance Data : \(datas)")

                            print("Here is attendance Signal : \(signal_Str)")

                            //datas = data

                            if in_time_Str != ""

                            {

                                self.server_in_time = in_time_Str

                                print("Here is attendance IN TIME : \(self.server_in_time)")

                            }

                            if out_time_Str != ""

                            {

                                self.server_out_time = out_time_Str

                                print("Here is attendance OUT TIME : \(self.server_out_time)")
                            }
                            if signal_Str == "10" {
                                self.grace_str_time = grace_Str
                                DispatchQueue.main.async {
                                    self.out_time_button.isEnabled = false
                                }
                            } else if signal_Str == "01" {
                                self.server_in_time = in_time_Str
                                DispatchQueue.main.async {
                                    self.inTimeTextField.text = self.server_in_time
                                    self.in_time_button.isEnabled = false
                                    self.out_time_button.isEnabled = true
                                }
                            } else if signal_Str == "00" {
                                self.server_out_time = out_time_Str   
                                DispatchQueue.main.async {   
                                    self.inTimeTextField.text = self.server_in_time   
                                    self.outTimeTextField.text = self.server_out_time    
                                    self.in_time_button.isEnabled = false    
                                    self.out_time_button.isEnabled = false    
                                }    
                            } else {    
                                print("Error : \(String(describing: error))")    
                            }    
                        }    
                    }    
                }    
            } else {    
                print("Error \(String(describing: error?.localizedDescription))")    
            }    
        }).resume()    
    }

1 Ответ

0 голосов
/ 27 апреля 2018

Где он разбился, неясно вашим кодом. Но что я могу сослаться - это вызвать self.delegate? .Sendgetattid (pop_att_id: send_pop_att_id, pop_in_time: send_pop_in_time), прежде чем вывести контроллер представления. Вложите выше в диспетчерский асинхронный вызов. Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...