Как создать проверку, информирующую пользователя о том, что извлечение данных из API все еще находится в процессе? - PullRequest
0 голосов
/ 01 октября 2018

Я создаю приложение для событий, в котором тысячи участников событий должны быть перечислены в UITableView после извлечения из API.Когда интернет-соединение медленное, это влияет на получение данных, в результате чего число участников nil увеличивается, когда пользователь нажимает кнопку participant.Кажется, при нажатии на кнопку это прерывает процесс извлечения данных.Как я могу избежать нажатия пользователем кнопки до тех пор, пока не будет завершено извлечение данных, чтобы избежать значения nil?В своем коде я использовал AAsquareLoading индикацию загрузки.Но процесс загрузки останавливается, даже извлечение данных еще не сделано.Или в любом случае я мог бы уведомить пользователя, что извлечение данных все еще находится в процессе или завершено, прежде чем нажать кнопку?Надеюсь, вы могли бы помочь мне решить мою проблему.спасибо

getParticipants Функция внутри APIService

func getParticipants(enteredPincode: String,
                     participantType: ParticipantType,
                     successBlock: @escaping ([Attendee]) -> Void,
                     failureBlock: @escaping (Error) -> Void)
{
    let attendeesURL = URL(string: "\(GET_PARTICIPANTS_URL)/\(enteredPincode)/\(participantType)")

    Alamofire.request(attendeesURL!, method: .get).validate().responseJSON { (response) in
        print(response)

        if let error = response.error
        {
            failureBlock(error)
            return
        }

        if let jsonArray = response.result.value as? [[String : Any]] {
            for anItem in jsonArray {
                if let eventparticipants = anItem["event_participants"] as? [[String : Any]] {
                   var extractedAttendees = [Attendee]()
                    for participants in eventparticipants{
                        let attendee = Attendee.init(JSON: participants)
                        extractedAttendees.append(attendee!)
                    }
                    successBlock(extractedAttendees)
                }
            }
        }
    }
}

Dashboard.Swift

import UIKit
import AASquaresLoadin
var validPincode: String!
var event: Event!
var participants: [Attendee]!
var activeParticipants: [Attendee]!

override func viewDidLoad() {
super.viewDidLoad()

configureAALoading()

guard event != nil,
        validPincode != nil else {
            _ = SCLAlertView(appearance: Appearance).showError("No Event Details", subTitle: "There's no event details, please logout and try again.")
            return
            }

    showEventDetails()
    getParticipants(enteredPincode: validPincode)
 }
 func showEventDetails() {
            self.eventNameLabel.text =  "\(self.event.name.uppercased())"
            self.locationLabel.text =  "\(self.event.location.uppercased())"

            if let dateStringFromDate = getFormattedStringFromDate(date: (self.event.startDateTime), formatString: "EEEE, MMM d, yyyy") {
            self.dateTimeLabel.text = dateStringFromDate
        } else {
            self.dateTimeLabel.text = "-"
        }

            if let startDateStringFromDate = getFormattedStringFromDate(date: (self.event.startDateTime), formatString: "h:mm a") {
                self.startDateTimeLabel.text = startDateStringFromDate
            } else {
                self.startDateTimeLabel.text = "-"
        }

    if let startDateStringFromDate = getFormattedStringFromDate(date: (self.event.endDateTime), formatString: "h:mm a") {
        self.endDateTimeLabel.text = startDateStringFromDate
    } else {
        self.endDateTimeLabel.text = "-"
    }
    }

func getParticipants(enteredPincode: String) {
    //Show Loading
    self.view.squareLoading.start(0.0)

    let api = APIService()

    // GET ALL PARTICIPANTS
    api.getParticipants(enteredPincode: validPincode, participantType: .all, successBlock: { (attendees) in

        self.participants = attendees


    }) { (error) in
          self.view.squareLoading.stop(0.0)
        _ = SCLAlertView(appearance: Appearance).showError("Network Error", subTitle: "Please check your internet connection and try again.")
        return
    }


    //GET ACTIVE PARTICIPANTS
    api.getParticipants(enteredPincode: validPincode, participantType: .active, successBlock: { (attendees) in


        self.activeParticipants = attendees
        self.view.squareLoading.stop(0.0)


    }) { (error) in

            // Hide loading view
            self.view.squareLoading.stop(0.0)
        _ = SCLAlertView(appearance: Appearance).showError("Network Error", subTitle: "Please check your internet connection and try again.")

        return
    }


}
...