Swift Firebase не хранит Bool - PullRequest
       148

Swift Firebase не хранит Bool

0 голосов
/ 06 августа 2020

У меня два ViewController, один называется ComposingOverviewViewController, а другой CheapestViewController. Если Пользователь нажимает кнопку, ему / ей;) будет показано CheapestViewController. Если пользователь нажимает «Выбрать», cheapestBool становится true. Сделанный выбор должен быть сохранен в Firebase с параметром bool, установленным как «true», чтобы его можно было проверить впоследствии, должен ли этот выбор отображаться или нет. Даже когда я проверяю это при сохранении данных в firebase, Xcode сообщает мне, что значение на самом деле «истина». Но в Firebase он сохраняется как "false".

Я должен сказать, что для того, чтобы действительно показать что-то в CheapestViewController, Пользователь должен сначала нажать кнопку check Values. Поскольку я знаю, что как только View снова переключается с CheapestViewController на ComposingOverviewViewController, сгенерированный Selection теряется. Итак, как только Пользователь нажимает «Сохранить» в ComposingOverviewController, выбор создается снова.

Может быть, он должен что-то с этим делать. Я удалил как можно больше ненужного кода. Надеюсь, это подходит для всех!

Но я на самом деле понятия не имею. Может кому поможет. :)

class ComposingOVerviewViewController: UIViewController {

 
    @IBOutlet weak var cheapestImageView: UIImageView!
    
    var individualimageViewBool = false
    var cheapestimageviewBool = false
    var efficientImageViewBool = false
    var bestImageViewBool = false
    var overAllBestImageViewBool = false
    var DollarJPerfor:Double?
    var projectCreated:String?
    let uid = User.current.uid
    
    var indivCompValue = [WeighScore]()
    var projCompValue = [ProjCompValue]()
    
    var projectBudget:Int = 0
    var projectDifficulty:Double = 0
    var projectCreativity:Double = 0

    var finalCheapest: [WeighScore] = []
    
    var cheapestBool:Bool?
    
    var freelancerArray = [WeighScore]()
    
    var jobAmountNeeded = [JobNeeded]()

    
    override func viewDidLoad() {
        super.viewDidLoad()

        UserService.projectjobamount(for: User.current, projectCreated: projectCreated ?? "no Value") { (jobNeeded) in
            self.jobAmountNeeded = jobNeeded
        }
            
        UserService.individualComposingValues(for: User.current) { (indivCompValue) in
            self.freelancerArray = indivCompValue
        }
        projectSpecification(for: User.current, projectCreated: projectCreated ?? "no Value")
        
        imageHighlights()
                

       
    }
    
   

// MARK: - Highlighten the Images when Team selected
    
    func imageHighlights() {
        
        if individualimageViewBool == true {
        individualImageView.image = UIImage(named: "Individual-1")
        } else {
        individualImageView.image = UIImage(named: "Individual") }
        
        if cheapestimageviewBool == true {
            cheapestImageView.image = UIImage(named: "cheapesthigh")
            cheapestBool = true
            
        }
        else { cheapestImageView.image = UIImage(named: "Cheapest") }
        
        if efficientImageViewBool == true {
            efficientImageView.image = UIImage(named: "Efficient-1")
        }
            
        else {  efficientImageView.image = UIImage(named: "Efficient") }
        
        if bestImageViewBool == true {
            bestImageView.image = UIImage(named: "Besthighlight") }
        else {bestImageView.image = UIImage(named: "Best") }
        
        if overAllBestImageViewBool == true {
            overAllBestImageView.image = UIImage(named: "absolutbesthigh") }
        else {overAllBestImageView.image = UIImage(named: "absolutbest") }
}

    
func getCheapest(member: [WeighScore], neededValue: [JobNeeded]) {
    var tempArray1: [WeighScore] = []

           for jobAmount in jobAmountNeeded {
               
           let neededValue = jobAmount.jobAmount
           tempArray1 = freelancerArray.filter { $0.memberJob == jobAmount.jobName}
            let amountInArray = tempArray1.count

            if neededValue == 0 { return
                   } else if neededValue == amountInArray{
                    tempArray1.sort(by: {$0.normalPrice! < $1.normalPrice!})
                    for value in tempArray1 {
                        print(value.memberName as Any)
                           print(tempArray1.count)
                           finalBest.append(value) }
              
            } else {
            tempArray1.sort(by: {$0.normalPrice! < $1.normalPrice!})
            let deletedValue = tempArray1.count - neededValue
            print("deleted Value: ", deletedValue)
                tempArray1.remove(0..<deletedValue)
                for value in tempArray1 {
                    print(value.memberName as Any)
                print(tempArray1.count)
                finalCheapest.append(value)
            }
        }
    }
}

    
    
// MARK: - Button Function to check Values only
    @IBAction func checkValues(_ sender: Any) {
        
    getBest(member: freelancerArray, neededValue: jobAmountNeeded, budgetLevel: projectBudget)
    getAbsolutBest(member: freelancerArray, neededValue: jobAmountNeeded)
    getMostEfficient(member: freelancerArray, neededValue: jobAmountNeeded)
    getCheapest(member: freelancerArray, neededValue: jobAmountNeeded)
    
}
        
// MARK: - Save the Team/ Teams
    
    @IBAction func saveAction(_ sender: Any) {
        print(cheapestBool)
        
        getCheapest(member: freelancerArray, neededValue: jobAmountNeeded)
        
       
        for value in finalCheapest {
            let finalCheapest = "finalCheapest"
            PostService.proposedTeams(projectCreated: projectCreated ?? "No Value", teamType: finalCheapest, memberJob: value.memberJob ?? "no value", memberName: value.memberName ?? "no Value", memberID: value.memberID ?? "no Value", ajp: value.ajp ?? 999, crea: value.crea ?? 999, ijr: value.ijr ?? 999, qpa: value.qpa ?? 999, coj: value.coj ?? 999, los: value.los ?? 999, iracc: value.iracc ?? 999, dph: value.dph ?? 999, normalPrice: value.normalPrice ?? 999, sumFreelanceRating: value.sumFreelanceRating ?? 999, priceJPerfScore: value.priceJPerfScore ?? 999, teamSelected: cheapestBool ?? false)
        }
    }
    

// MARK: - Pass data to specific ViewController of Team Alternatives
    
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
         if segue.identifier == "teamToCheapest" {
            let destVC = segue.destination as! CheapestViewController
            print(sentcheapestTeam.count)
            destVC.finalCheapest = finalCheapest
        }
    
    }
    

    
//    MARK: - Go to specific Teams
    
    
   
    @IBAction func cheapest(_ sender: Any) {
        
       
        
        performSegue(withIdentifier: "teamToCheapest", sender: self)

    }
    
   
}


// MARK: - Extensions

extension Array {
 
   mutating func remove(_ range: Range<Int>) -> Array {
      let values = Array(self[range])
      self.removeSubrange(range)
      return values
   }
}
class CheapestViewController: UIViewController {

    
// MARK: - Properties
    
   @IBOutlet weak var tableView: UITableView!
    
    
//    var VC = ComposingOVerviewViewController()
    var finalCheapest = [WeighScore]()

        
        
        override func viewDidLoad() {
            super.viewDidLoad()

            // Do any additional setup after loading the view.
        }
    
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "cheapestToOverview" {
            let destVC = segue.destination as! ComposingOVerviewViewController
            
            destVC.cheapestBool = true
        }
    }
        

    @IBAction func chooseCheapest(_ sender: Any) {
        
        print(finalCheapest.count)
        for value in finalCheapest {
            print(value.memberJob)
        
        }
        performSegue(withIdentifier: "cheapestToOverview", sender: self)


    }
    

    }
class WeighScore {
    
    var key: String?
    let memberJob: String?
    let memberName: String?
    let memberID:String?
    let ajp: Double?
    let crea:Double?
    let ijr:Double?
    let qpa:Double?
    let coj:Double?
    let los:Double?
    let iracc:Double?
    let dph:Double?
    let normalPrice:Double?
    var sumFreelanceRating:Double?
    let priceJPerfScore:Double?
    
        
    
    init(ajp: Double, crea:Double, ijr:Double, qpa:Double, coj:Double, los:Double, iracc:Double, dph:Double, sumFreelanceRating:Double, normalPrice:Double, memberJob: String, memberName: String, priceJPerfScore:Double, memberID:String) {
            
        self.ajp = ajp
        self.crea = crea
        self.ijr = ijr
        self.qpa = qpa
        self.coj = coj
        self.los = los
        self.iracc = iracc
        self.dph = dph
        self.sumFreelanceRating = sumFreelanceRating
        self.normalPrice = normalPrice
        self.memberName = memberName
        self.memberJob = memberJob
        self.priceJPerfScore = priceJPerfScore
        self.memberID = memberID
  
        }
    
    
    var dictValue: [String: Any] {
        
        return ["memberName" : memberName,
                "memberJob" : memberJob,
                "ajp" : ajp,
                "crea" : crea,
                "ijr" : ijr,
                "qpa" : qpa,
                "coj" : coj,
                "los" : los,
                "iracc" : iracc,
                "dph" : dph,
                "normalPrice": normalPrice,
                "sumFreelanceRating" : sumFreelanceRating,
                "priceJPerfScore": priceJPerfScore,
                "memberID": memberID,
                ]
        

    }
    init?(snapshot: DataSnapshot) {
        guard let dict = snapshot.value as? [String: Any],
            
            let memberJob = dict["memberJob"] as? String,
            let memberName = dict["memberName"] as? String,
            let ajp = dict["ajp"] as? Double,
            let crea = dict["crea"] as? Double,
            let ijr = dict["ijr"] as? Double,
            let qpa = dict["qpa"] as? Double,
            let coj = dict["coj"] as? Double,
            let los = dict["los"] as? Double,
            let iracc = dict["iracc"] as? Double,
            let dph = dict["dph"] as? Double,
            let normalPrice = dict["normalPrice"] as? Double,
            let sumFreelanceRating = dict["sumFreelanceRating"] as? Double,
            let priceJPerfScore = dict["priceJPerfScore"] as? Double,
            let memberID = dict["memberID"] as? String
          
        
            else {return nil}
                         self.memberJob = memberJob
                         self.memberName = memberName
                         self.ajp = ajp
                         self.crea = crea
                         self.ijr = ijr
                         self.qpa = qpa
                         self.coj = coj
                         self.los = los
                         self.iracc = iracc
                         self.dph = dph
                         self.normalPrice = normalPrice
                         self.sumFreelanceRating = sumFreelanceRating
                         self.priceJPerfScore = priceJPerfScore
                         self.memberID = memberID
    }
    
}

class TeamSetting {
    
    var key: String?
    let memberJob: String?
    let memberName: String?
    let memberID:String?
    let ajp: Double?
    let crea:Double?
    let ijr:Double?
    let qpa:Double?
    let coj:Double?
    let los:Double?
    let iracc:Double?
    let dph:Double?
    let normalPrice:Double?
    var sumFreelanceRating:Double?
    let priceJPerfScore:Double?
    var teamSelected: Bool?
    
        
    
    init(ajp: Double, crea:Double, ijr:Double, qpa:Double, coj:Double, los:Double, iracc:Double, dph:Double, sumFreelanceRating:Double, normalPrice:Double, memberJob: String, memberName: String, priceJPerfScore:Double, memberID:String, teamSelected: Bool) {
            
        self.ajp = ajp
        self.crea = crea
        self.ijr = ijr
        self.qpa = qpa
        self.coj = coj
        self.los = los
        self.iracc = iracc
        self.dph = dph
        self.sumFreelanceRating = sumFreelanceRating
        self.normalPrice = normalPrice
        self.memberName = memberName
        self.memberJob = memberJob
        self.priceJPerfScore = priceJPerfScore
        self.memberID = memberID
        self.teamSelected = teamSelected
  
        }
    
    
    var dictValue: [String: Any] {
        
        return ["memberName" : memberName,
                "memberJob" : memberJob,
                "ajp" : ajp,
                "crea" : crea,
                "ijr" : ijr,
                "qpa" : qpa,
                "coj" : coj,
                "los" : los,
                "iracc" : iracc,
                "dph" : dph,
                "normalPrice": normalPrice,
                "sumFreelanceRating" : sumFreelanceRating,
                "priceJPerfScore": priceJPerfScore,
                "memberID": memberID,
                "teamSelected": teamSelected]
        

    }
    init?(snapshot: DataSnapshot) {
        guard let dict = snapshot.value as? [String: Any],
            
            let memberJob = dict["memberJob"] as? String,
            let memberName = dict["memberName"] as? String,
            let ajp = dict["ajp"] as? Double,
            let crea = dict["crea"] as? Double,
            let ijr = dict["ijr"] as? Double,
            let qpa = dict["qpa"] as? Double,
            let coj = dict["coj"] as? Double,
            let los = dict["los"] as? Double,
            let iracc = dict["iracc"] as? Double,
            let dph = dict["dph"] as? Double,
            let normalPrice = dict["normalPrice"] as? Double,
            let sumFreelanceRating = dict["sumFreelanceRating"] as? Double,
            let priceJPerfScore = dict["priceJPerfScore"] as? Double,
            let memberID = dict["memberID"] as? String,
            let teamSelected = dict["teamSelected"] as? Bool
          
        
            else {return nil}
                         self.memberJob = memberJob
                         self.memberName = memberName
                         self.ajp = ajp
                         self.crea = crea
                         self.ijr = ijr
                         self.qpa = qpa
                         self.coj = coj
                         self.los = los
                         self.iracc = iracc
                         self.dph = dph
                         self.normalPrice = normalPrice
                         self.sumFreelanceRating = sumFreelanceRating
                         self.priceJPerfScore = priceJPerfScore
                         self.memberID = memberID
                         self.teamSelected = teamSelected
    }
    
}

1 Ответ

0 голосов
/ 07 августа 2020

В вопросе нет кода firebase, поэтому ответить на этот вопрос

Swift Firebase не хранит Bool?

невозможно.

В вопросе много кода, но похоже, что это настройка Master-> Detail (?) С основным viewController ComposingOVerviewViewController и детализацией CheapestViewController. Если да, то одна из проблем заключается в том, что подробный viewController порождает нового мастера?

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "cheapestToOverview" {
        let destVC = segue.destination as! ComposingOVerviewViewController
        
        destVC.cheapestBool = true
    }
}
...