Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

FetchRequest - NSArray element failed to match the Swift Array Element type - Swift 2.0

I want to do a NSFetchRequest to display my data into a UICollectionView :

import UIKit
import CoreData

let appDelegate: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let context: NSManagedObjectContext = appDelegate.managedObjectContext
class GarageViewController: UIViewController, UICollectionViewDelegate,UICollectionViewDataSource {

@IBOutlet weak var backgroundView: UIImageView!

@IBOutlet weak var collectionView: UICollectionView!

var voitures: [Voiture]  = [Voiture]()

override func viewDidLoad() {
    super.viewDidLoad()

    collectionView.reloadData()

    let fetchRequest = NSFetchRequest(entityName: "Voiture")
    fetchRequest.resultType = .DictionaryResultType

    do {
        try voitures = context.executeFetchRequest(fetchRequest) as! [Voiture]
    }
    catch let fetchError as NSError {
        print("VoitureFetch error: \(fetchError.localizedDescription)")
    }

    if (voitures.count > 0) {
        for voiture in voitures as [Voiture] {

            print(voiture.nom!)

        }
    }
    else {
        print("Aucune voiture")
    }

}

When I run the code I get that error :

fatal error: NSArray element failed to match the Swift Array Element type

Thank's for your help !

like image 479
Antonio Avatar asked Jul 08 '15 22:07

Antonio


2 Answers

I had the same problem. The issue was due to not setting the class property for the entity in model file.

enter image description here

like image 89
muneeb Avatar answered Sep 20 '22 12:09

muneeb


Solution

var voitures: [NSManagedObject]?  = [NSManagedObject]()


if (voitures!.count > 0) {

        let voiture: NSManagedObject = voitures![indexPath.row]

        print((voiture.valueForKey("nom") as? String))
    }
like image 41
Antonio Avatar answered Sep 18 '22 12:09

Antonio