Получение индекса из ошибки при перезагрузке табличного представления

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    tableView.deselectRow(at: indexPath, animated: true)
    let order =  orders[indexPath.row]
    guard orders.count > indexPath.row else {
        print("Index out of range")
        return
    }
    
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    var viewController = storyboard.instantiateViewController(withIdentifier: "viewControllerIdentifer") as! OrderDetailsController
    viewController.passedValue = order.id
    self.present(viewController, animated: true , completion: nil)      
}

Всякий раз, когда я закрываю свое приложение (перехожу в фоновый режим) и снова открываю его, оно вылетает.

фатальная ошибка: индекс вне допустимого диапазона

2017-06-18 18:09:33.726310 JaeeDriver[1378:563304] фатальная ошибка: индекс вне допустимого диапазона

Я понятия не имею, почему он это делает. Важно отметить, что в ViewDidLoudI есть эта строка кода для обновления моей таблицы

var timer = Timer.scheduledTimer(
    timeInterval: 4, 
    target: self, 
    selector: "GetOrders", 
    userInfo: nil, 
    repeats: true
)

и всякий раз, когда происходит обновление, у меня есть этот код в начале функции GetOrders

func GetOrders (){   
    orders = []
    ...
}

удалить старые данные и заменить их новыми

Обновить

в конце GetOrder

func GetOrders (){   
    orders = []
    ....
    ....
    DispatchQueue.main.async {
        self.tableview.reloadData()
    }
}
       

количество секций и рядов:

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return orders.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
     let cell = tableView.dequeueReusableCell(withIdentifier: "OrderCell", for: indexPath) as! OrderCell
    
    let entry = orders[indexPath.row]
    
    cell.DateLab.text = entry.date
     cell.shopNameLab.text = entry.shopname
    cell.shopAddLab.text = entry.shopaddress
    cell.nameClientLab.text = entry.clientName
    cell.clientAddLab.text = entry.ClientAddress
    cell.costLab.text = entry.Cost
    cell.perefTimeLab.text = entry.PerferTime
    cell.Shopimage.hnk_setImage(from: URL(string: entry.Logo))
    return cell
}

Любая помощь, пожалуйста, будет оценена по достоинству.


person AlmoDev    schedule 18.06.2017    source источник
comment
Вызовите tableView.reloadData() всякий раз, когда ваш массив orders изменяется.   -  person deadbeef    schedule 18.06.2017
comment
пожалуйста, проверьте мой обновленный вопрос   -  person AlmoDev    schedule 18.06.2017
comment
точка останова вашего приложения, где вы получаете заказ и видите indexPath и orders.count   -  person Svetoslav Bramchev    schedule 18.06.2017
comment
в этой строке ››› пусть порядок = заказы[indexPath.row]   -  person AlmoDev    schedule 18.06.2017
comment
Обновите свой вопрос с помощью методов numberOfSections и numberOfRowsInSection.   -  person rmaddy    schedule 18.06.2017
comment
только что проверил, пожалуйста   -  person AlmoDev    schedule 18.06.2017


Ответы (1)


Я думаю, вам нужно добавить еще один массив, скажем, temporder . добавьте новый список в это после получения свежего списка, измените данные массива порядка с temporder и перезагрузите его. Вы очищаете данные заказа и выбираете элемент списка в виде таблицы. Но в то время свежие данные не добавлялись в массив заказов.

person Jitendra Tanwar    schedule 18.06.2017
comment
Спасибо, мужик. Вы можете добавить немного кода, чтобы понять это ясно, пожалуйста - person AlmoDev; 19.06.2017
comment
пожалуйста, если вы можете помочь мне здесь, я был бы признателен - person AlmoDev; 19.06.2017