2017-10-08 1 views
0

Haben Schwierigkeiten, meinen Fehler hier zu sehen. Ich hole Datensätze von CoreData in Array und habe Probleme damit, dass alle Datensätze in UIPickerView angezeigt werden. Ich bin mir sicher, dass ich etwas sehr einfaches verpasse, aber ich fing an, Swift zu lernen und nach einer Anleitung zu suchen.UIPickerView und CoreData Array

Erwartetes Ergebnis: Ich habe 2 Spieler in meinem Wunsch holen und beide Spieler in der UIPickerView

Tatsächliches Ergebnis zeigen sollte: Nur ein Datensatz zeigt sich

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) 

} 
} 

Antwort

1

Es scheint, dass Sie playerPickerSource bei jedem Zug in Ihrer Schleife ein neues Array zuweisen.

Also statt

for player in playerArray { 

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

sollten Sie

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

Ich wusste, dass ich müde zu werden !! Vielen Dank für Ihre Hilfe GBaeOne. –