2017-10-08 5 views
0

J'ai du mal à voir mon erreur ici. Je récupère des enregistrements de CoreData dans Array et j'ai du mal à voir tous les enregistrements apparaître dans UIPickerView. Je suis sûr qu'il me manque quelque chose de très simple mais j'ai juste commencé à apprendre Swift et à chercher des conseils.UIPickerView et CoreData Array

Résultat attendu: J'ai 2 joueurs dans ma demande de récupération et les deux joueurs devraient apparaître dans le UIPickerView

Résultat réel: Un seul enregistrement apparaît

code:

import UIKit 
import CoreData 

class selectPlayersStatsViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate, NSFetchedResultsControllerDelegate { 

@IBOutlet weak var playerSelector: UIPickerView! 

var moc:NSManagedObjectContext! 

var playerPickerSource: [String] = [String]() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    playerSelector.dataSource = self 
    playerSelector.delegate = self 

    moc = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 
    let playerIsRequest:NSFetchRequest<PlayerTable> = PlayerTable.fetchRequest() 
     playerIsRequest.returnsObjectsAsFaults = false 

    var playerArray = [PlayerTable]() 

    do { 
     playerArray = try moc.fetch(playerIsRequest) 

    } catch { 
     print(error) 
    } 

    for player in playerArray { 

     playerPickerSource = [player.playername!] 
     //print(playerPickerSource) 
     //print(playerPickerSource.count) 
    } 
} 


//PICKER VIEW 
public func numberOfComponents(in pickerView: UIPickerView) -> Int{ 
    return 1 

} 

public func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int{ 

    return playerPickerSource.count 

} 

public func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 

    return playerPickerSource[row] 

} 

public func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView { 

    let playerLabel = UILabel() 
    let playerData = playerPickerSource[row] 

    let myTitleYear = NSAttributedString(string: playerData, attributes: [NSFontAttributeName:UIFont(name: "Avenir Next", size: 18.0)!,NSForegroundColorAttributeName:UIColor.black]) 

    playerLabel.textAlignment = .center 
    playerLabel.attributedText = myTitleYear 
    return playerLabel 

} 
///////// 
@IBAction func goViewButton(_ sender: Any) { 

    let myPlayer = playerPickerSource[playerSelector.selectedRow(inComponent: 0)] 
    //let myYear = yearPickerSource[playerSelector.selectedRow(inComponent: 0)] 
    print(myPlayer) 
    // print(myYear) 

} 
} 

Répondre

1

Il semble que vous attribuez un nouveau tableau à playerPickerSource à chaque tour de votre boucle.

Ainsi, au lieu de

for player in playerArray { 

    playerPickerSource = [player.playername!] 
    //print(playerPickerSource) 
    //print(playerPickerSource.count) 
} 

Vous devriez essayer

for player in playerArray { 
    playerPickerSource.append(player.playername!) 
} 
+0

Je savais que je fatiguais !! Merci beaucoup pour votre aide GBaeOne. –