У меня есть приложение 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 или более контактов без сбоев, но я не уверен. У кого-нибудь есть предложения?