Я хочу получить данные при запуске 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()
}