Array.append изменяет ранее добавленные значения - swift 4.0 - PullRequest
0 голосов
/ 12 июня 2018

Я работаю над проектом, который должен получать данные с разных URL-адресов серверов одновременно, используя GCD.Он работает так, как задумано, получая данные с серверов и обновляя представление.

Контроллер подключения:

    private func initiateObjects() {
        self.stationCounter = 1
        self.request = StationRequests()
        self.object  = StationObject()
    }

    private func initiateRequests() {
        request = StationRequests(self.stationCounter)
        request.object = self.object
        request.delegate = self
    }

    private func sendRequest() {
        queueStation.async {
            self.request.SendRequest()
        }
    }

    private func updateView(_ obj: BaseObject?) {
        DispatchQueue.main.async {        
            NotificationCenter.default.post(name: .dataFetched, object: nil, userInfo: ["item": obj ?? BaseObject()])
        }
    }

    func managerDidReceived(data: Any, request: BaseRequest) {
        let parsedObj = request.object?.Parse(data)
        self.updateView(parsedObj)
    }

Просмотр контроллера:

    override func viewDidLoad() {
        super.viewDidLoad()

        self.initiateStationListService()
    }

    private func initiateStationListService() {
        self.connection.initiate()
        NotificationCenter.default.addObserver(self, selector: #selector(self.dataFetched(_:)), name: .dataFetched, object: nil)
    }

    @objc func dataFetched(_ notification: Notification) {
        guard let items = notification.userInfo as? [String:StationObject] else { return }
        guard let item = items["item"] else { return }
        self.stationList.append(item) //HERE IS THE PROBLEM
        self.collectionView?.reloadData()
    }

Проблема заключается в том, что когда я хочу добавить извлеченный объект в свой список для отображения в CollectionView, все элементы списка меняются на последний.Я имею в виду, что все ранее добавленные предметы идентичны и совпадают с последними.Итак, когда я перезагружаю CollectionView, все записи одинаковы.Сам загруженный элемент является правильным, и с этим нет проблем.

1 Ответ

0 голосов
/ 12 июня 2018

Попробуйте ниже:

self.stationList += [item]
self.collectionView?.reloadData()
...