У меня есть проблема с потоками в моем решении? - PullRequest
0 голосов
/ 04 июня 2019

У меня есть приложение Swift 3, которое на самом деле работает в App Store, но мы обнаружили проблему. Это приложение похоже на социальную сеть банка, что-то очень похожее на WhatsApp, в нем есть опция, в которой вы можете создать группу из множества ваших контактов, но возникает вопрос: «Если вы попытаетесь создать группу из 15 контактов или более, приложение зависает и через несколько минут вылетает "

Я пытаюсь добавить некий «DispatchQueue.main.async» в класс, который создает группы, потому что я считаю, что проблема связана с неправильным использованием потоков. В приведенном ниже коде я покажу вам, как создаются группы:

@ IBOutlet, слабый var collectionViewContactos: UICollectionView! @IBOutlet слабая переменная tableViewContactos: UITableView! пусть contactosSugeridos = 20

// MARK: - Variables
var nombreGrupo: String!
var imagenGrupo: UIImage?
var grupoCreado: Grupo?
var editarGrupo = false
var isCobroRapido = false
var contactos = [Contacto]()
var contactosSeleccionados = [Contacto]()
var contactosEncontrados = [Contacto]() 
var buscandoContactos: Bool = false

приватный функционал crearGrupo () {

    if self.contactosSeleccionados.count < 2 {
        let errorView = PPAlertView(view: self.navigationController!.view)
        errorView.mostrarConMensaje(NSLocalizedString("error_activityCrearGrupo_integrantesGrupo", comment: ""))

    } else {
        let hud = self.mostrarLoading(self.navigationController!.view)
        PeperApi.shareClient.agregarGrupo(nombreGrupo: self.nombreGrupo, completion: { (grupoID, error) in
            if let error = error {
                let errorView = PPAlertView(view: self.navigationController!.view)
                errorView.mostrarConMensaje(error.localizedDescription)

                hud?.dismiss()

            } else if let grupoID = grupoID {
                self.grupoCreado = Grupo()
                self.grupoCreado?.grupoID = grupoID
                self.grupoCreado?.nombre = self.nombreGrupo
                if let imagenGrupo = self.imagenGrupo {
                    PeperApi.shareClient.actualizarFotoGrupo(image: imagenGrupo, groupId: "\(grupoID)", completion: { (urlString, error) in

                        if let error = error {
                            let errorView = PPAlertView(view: self.navigationController!.view)
                            errorView.mostrarConMensaje(error.localizedDescription)
                            hud?.dismiss()

                        } else {

                            self.grupoCreado?.urlImagen = urlString
                            if let user = User.getUser(), let imagenPerfil = user.imageUrl {
                                PeperApi.shareClient.agregarAmigosAlGrupo(fotoPerfilOwner: imagenPerfil, grupoId: grupoID, contactos: self.contactosSeleccionados, completion: { (error) in
                                    if let error = error {
                                        let errorView = PPAlertView(view: self.navigationController!.view)
                                        errorView.mostrarConMensaje(error.localizedDescription)

                            } else {
                                PeperApi.shareClient.agregarAmigosAlGrupo(grupoId: grupoID, contactos: self.contactosSeleccionados, completion: { (error) in
                                    if let error = error {
                                        let errorView = PPAlertView(view: self.navigationController!.view)
                                        errorView.mostrarConMensaje(error.localizedDescription)

                                    } else {

                                        self.grupoCreado?.cantidadIntegrantes = self.contactosSeleccionados.count

                                    }
                                    hud?.dismiss()
                                })
                            }

                        }
                    })
                } else if let user = User.getUser(), let imagenPerfil = user.imageUrl {
                    PeperApi.shareClient.agregarAmigosAlGrupo(fotoPerfilOwner: imagenPerfil, grupoId: grupoID, contactos: self.contactosSeleccionados, completion: { (error) in
                        if let error = error {
                            let errorView = PPAlertView(view: self.navigationController!.view)
                            errorView.mostrarConMensaje(error.localizedDescription)


                } else {
                    PeperApi.shareClient.agregarAmigosAlGrupo(grupoId: grupoID, contactos: self.contactosSeleccionados, completion: { (error) in
                        if let error = error {
                            let errorView = PPAlertView(view: self.navigationController!.view)
                            errorView.mostrarConMensaje(error.localizedDescription)

                        }
                        hud?.dismiss()
                    })
                }
            }
        })
    }
}


private func agregarContactosGrupo() {
    if self.contactosSeleccionados.count > 0 {

        if let grupo = self.grupoCreado, let grupoID = grupo.grupoID {

// DispatchQueue.main.async {

            let hud = self.mostrarLoading(self.navigationController!.view)
            PeperApi.shareClient.agregarAmigosAlGrupo(grupoId: grupoID, contactos: self.contactosSeleccionados, completion: { (error) in
                if let error = error {
                    let errorView = PPAlertView(view: self.navigationController!.view)
                    errorView.mostrarConMensaje(error.localizedDescription)

                } else {
                    self.navigationController?.popViewController(animated: true)
                }
                hud?.dismiss()
            })
        }
    }
}

В закомментированной строке: "//DispatchQueue.main.async {" я полагаю, что это может помочь создать группу из 15 или более контактов без сбоев, но я не уверен. У кого-нибудь есть предложения?

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