So I am using core data and I have to make my class Decodable to use the decoder for my get request. The errors I get are 'self' used in property access before 'super.init' call in my CoreDataClass each of my decode values has the error.
CoreDataProperties
extension CurrentPlayers {
@nonobjc public class func fetchRequest() - NSFetchRequestCurrentPlayers {
return NSFetchRequestCurrentPlayers(entityName: "CurrentPlayers")
}
@NSManaged public var photoUrl: String?
@NSManaged public var firstName: String?
@NSManaged public var lastName: String?
@NSManaged public var position: String?
@NSManaged public var team: String?
@NSManaged public var yahooName: String?
@NSManaged public var status: String?
@NSManaged public var jerseyNumber: Int64
}
extension CurrentPlayers : Identifiable {
}
CoreDataClass
@objc(CurrentPlayers)
public class CurrentPlayers: NSManagedObject, Decodable {
enum CodingKeys: String, CodingKey {
case photoUrl = "PhotoUrl"
case firstName = "FirstName"
case lastName = "LastName"
case position = "Position"
case team = "Team"
case yahooName = "YahooName"
case status = "Status"
case jerseyNumber = "JerseyNumber"
}
required public init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
photoUrl = try values.decode(String.self, forKey: CodingKeys.photoUrl)
firstName = try values.decode(String.self, forKey: CodingKeys.firstName)
lastName = try values.decode(String.self, forKey: CodingKeys.lastName)
position = try values.decode(String.self, forKey: CodingKeys.position)
team = try values.decode(String.self, forKey: CodingKeys.team)
yahooName = try values.decode(String.self, forKey: CodingKeys.yahooName)
status = try values.decode(String.self, forKey: CodingKeys.status)
jerseyNumber = Int64(try values.decode(Int.self, forKey: CodingKeys.jerseyNumber))
}
}
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
I'm trying to filter my players using searchBar with scope in a collectionview using a switch statement and my case 0 works but the issue is my other cases I can type into the searchBar but I can't seem to filter (nothing shows up) nor can I delete all the characters when I type.
I have 2 arrays my cPlayerArr is my original array when data is recieved and my allTextArr is my filtered array when any kind of filtering is done.
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
allTextArr = cPlayerArr.filter({ player - Bool in
switch searchBar.selectedScopeButtonIndex {
case 0:
if searchText.isEmpty {
fetchAllPlayers()
} else {
return
player.yahooName!.lowercased().contains(searchText.lowercased())
}
case 1:
if searchText.isEmpty {
fetchForwards()
} else {
print(searchText)
return player.yahooName!.lowercased().contains(searchText.lowercased()) && player.position == "C" &&
player.position == "RW" && player.position == "LW"
}
case 2:
if searchText.isEmpty {
fetchDefense()
} else {
return player.yahooName!.lowercased().contains(searchText.lowercased()) && player.position == "D"
}
case 3:
if searchText.isEmpty {
fetchGoalies()
} else {
return player.yahooName!.lowercased().contains(searchText.lowercased()) && player.position == "G"
}
default:
return false
}
return true
})
collections.reloadData()
}
func searchBar(_ searchBar: UISearchBar, selectedScopeButtonIndexDidChange: Int) {
if (searchBar.selectedScopeButtonIndex == 0) {
cPlayerArr.removeAll()
allTextArr.removeAll()
fetchAllPlayers()
} else if (searchBar.selectedScopeButtonIndex == 1) {
allTextArr.removeAll()
fetchForwards()
} else if (searchBar.selectedScopeButtonIndex == 2) {
allTextArr.removeAll()
fetchDefense()
} else {
allTextArr.removeAll()
fetchGoalies()
}
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) - Int {
if (searchBar.text != "" || searchBar.selectedScopeButtonIndex 0) {
return allTextArr.count
} else {
return cPlayerArr.count
}
}
I have an issue fetching objects from Core Data in my favourites section. I can save it with a button but I can not seem to retrieve the objects when I restart the app. I get it to print over 40000 (I have no idea why) and I see no favourites in my favourites section when I added them before.
override func viewDidLoad() {
super.viewDidLoad()
if currentFav == nil {
//display nil
fetchSave()
self.tableView.separatorStyle = UITableViewCell.SeparatorStyle.none
} else {
NotificationCenter.default.post(name: .passFavNotification,
object: self.currentFav)
DispatchQueue.main.asyncAfter(deadline: .now() + 300) {
self.reviewRating.requestReview(isWrittenReview: false)
}
}
}
//trying to get this function to retrieve my objects in the persistent store
func fetchSave() {
let fetchRequest: NSFetchRequest<CurrentPlayers>
fetchRequest = CurrentPlayers.fetchRequest()
do {
let objects = try context.fetch(fetchRequest)
//I get over 40000 objects
print("These are how many saved favourites I have: \(objects.count)")
tableView.reloadData()
} catch {
print("Fetch failed")
}
}
@IBAction func save(_ sender: UIBarButtonItem) {
let saveFav = CurrentPlayers(context: context)
// Assign values to the entity's properties
for o in prefArr {
saveFav.yahooName = o.yahooName
saveFav.team = o.team
saveFav.position = o.position
saveFav.photoUrl = o.photoUrl
print("These are my saved objects: \(saveFav)")
// To save the new entity to the persistent store, call
// save on the context
}
do {
try context.save()
} catch {
print(error)
}
}
I'm trying to transfer a tableview cell from my hockeydetailVC to my favouritesVC using a button and I can't transfer it due to some issue.
My hockeydetailVC
protocol addThis {
func addFav(data: CurrentPlayers)
}
I'm trying to transfer my item object
var item: CurrentPlayers?	
var delegate: addThis? = nil	
func sendData() {
if delegate != nil {
let data = item!
delegate?.addFav(data: data)
print("This is the data being transferred: \(data)")
}
}
@IBAction func addToFav(_ sender: Any) {
sendData()
print("Favourite button Pressed")
}
My favouritesVC
var currentFav: CurrentPlayers?
func addFav(data: CurrentPlayers) {
currentFav = data
}
I have a segue for my button so I have this
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "r" {
let hockeyDetailVC: HockeyDetailVC = segue.destination as! HockeyDetailVC
hockeyDetailVC.delegate = self
}
}
If the transfer works then my sendData() method up top would print a statement but my addToFav only prints "favourite button pressed".
I am not sure how to transfer data a name from a button in my UITableViewCell to a UIViewController. I have a prepare function but it doesn't work gives me an unrecognized selector error. Is there a way to use it for this instance?
func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "hs" {
let destinationController = segue.destination as! HighlightsVC
destinationController.playerName = (item.yahooName!)
}
}