2017-10-08 14 views
0

ここで私の間違いを見るのに問題があります。 CoreDataからArrayにレコードを取得していて、すべてのレコードがUIPickerViewに表示されるのに問題があります。私は何か非常にシンプルなものを見逃していると確信していますが、ちょうどスイフトを学び、いくつかの指導を探し始めましたUIPickerViewとCoreData Array

期待される結果は:私はフェッチ要求を私の中に2人の選手を持っており、両方のプレイヤーがUIPickerView

実際の結果に表示されるはずです:一つだけのレコードが現れる

コード:

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) 

} 
} 

答えて

1

それをあなたのループの各ターンでplayerPickerSourceに新しい配列を割り当てているようです。

ので、代わりの

for player in playerArray { 

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

あなたは私が疲れて知っていた

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

を試してみてください!! GBaeOneのお手伝いをありがとうございました。 –