2017-07-27 3 views
0

私は4つの項目を持つデフォルトの配列を持っています。 新しいアイテムを2番目のビューから追加しようとすると、1つのアイテムが削除されますが、追加する必要があります。 saveNewScoreがトリガされるたびに、配列に新しいItemを追加する必要があります。私はこの配列なぜ、それを追加するのではなく、配列内のItemを減算するのですか?

var playerData: [Player] = Player.createDefaultData() 

が前の配列は4つのデフォルト値を持っている持っている最初のビュー については

。 は後で私が国連風セグエIBAction

@IBAction func newPlayerData(segue: UIStoryboardSegue) { 
     let editor = segue.source as! playerEditor 
     if let newData = editor.playerData { 
      playerData = newData 
     } 
     displayPlayerLeaderboard() 
    } 

前のコードは私の2番目のビューコントローラであるplayerEditorビューから新しい配列を取得しています。私は次のコード

// Player Array 
    var playerData: [Player]? 
// Func to add new player to playerData 
    @IBAction func saveNewScore() { 
      if let name = nameField.text, let hometown = hometownField.text, let state = stateField.text, let score = scoreField.text, let date = dateField.text { 
       if name.isEmpty == false && hometown.isEmpty == false && state.isEmpty == false && score.isEmpty == false && date.isEmpty == false { 
        let thisScore = Int(score) ?? 300 
        if thisScore >= 300 || thisScore < 0 { 
         let alert = UIAlertController(title: "Invalid Score", message: "A Player score must between the values of 0 and 300.", preferredStyle: .alert) 
         let okButton = UIAlertAction(title: "OK", style: .default, handler: nil) 
         alert.addAction(okButton) 
         present(alert, animated: true) 
        } else if let savedPlayer = playerID, let savedData = playerData { 
         for (offset,player) in savedData.enumerated() { 
          if player.uniqueID == savedplayer { 
           player.name = name 
           player.town = hometown 
           player.state = state 
           player.score = thisScore 
           player.date = date 
           player.Data?[offset] = player 
          } 
         } 
         dismiss(animated: true, completion: nil) 
        } else { 
         let newPlayer = Player(name: name, town: hometown, state: state, score: thisScore, date: date, uniqueID: largestID + 1) 
         playerData?.append(newPlayer) 
         dismiss(animated: true, completion: nil) 
        } 
       } else { 
        let alert = UIAlertController(title: "Invalid Data", message: "Ensure that all text fields have data in them before proceeding.", preferredStyle: .alert) 
        let okButton = UIAlertAction(title: "OK", style: .default, handler: nil) 
        // add action to alert controller 
        alert.addAction(okButton) 
        present(alert, animated: true) 
       } 
      } 
     } 

前のコードを持ってplayerEditor呼ば2番目のビューについては

は、複数のUITextFieldsから情報を取得するタイプのプレーヤーのplayerDataアレイに新しいプレイヤーを追加します。

ソート機能

func sortData(data: [Player]) -> [Player] { 
     var newData: [Player] = [] 
     for (offset,player) in data.enumerated() { 
      if offset == 1 { 
       newData += [player] 
      } else { 
       for (offset,newPlayer) in newData.enumerated() { 
        if player.score >= newPlayer.score { 
         newData.insert(player, at: offset) 
         break 
        } else if offset == (newData.count - 1) { 
         newData.append(player) 
        } 
       } 
      } 

     } 
     return newData 
    } 

答えて

0

は、以下の方法であるnewDataのcountを確認してください。 playerData配列へのあなたが更新され、その異なるように思える: - 私は取得

@IBAction func newPlayerData(segue: UIStoryboardSegue) { 
     let editor = segue.source as! playerEditor 
     if let newData = editor.playerData { 
     //Check the count of newData here 
      playerData = newData 
     } 
     displayPlayerLeaderboard() 
    } 
+0

カウントは4 –

+0

が次にあなたが配列を操作している他の場所をチェックしているのですか? –

+0

私はまたように行くソート機能を持っています –

関連する問題