2017-10-08 112 views
0

在这里查看我的错误很困难。我将CoreData中的记录提取到Array中,并且遇到了在UIPickerView中显示所有记录的问题。我确定我错过了一些非常简单的东西,但刚开始学习Swift并寻找一些指导。UIPickerView和CoreData数组

预期结果:我有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。 –