2017-04-07 2 views
0

J'utilise le code suivant pour éliminer les attributs lors de l'extraction à partir de mon CoreDataModel appelé industrie. Cependant, je suis en mesure d'accéder à ces attributs qui n'ont pas demandé l'aide fetchRequest.propertiesToFetch laisser fetchRequest = NSFetchRequest (entityName: "Industrie") fetchRequest.propertiesToFetch = [ "id", "industry_name"]Récupération d'attributs ou de propriétés particuliers dans CoreData

After this i am using following code: 
    industryObject.industry_name=tuple.value(forKey: ""ind_subtype"") as? String 

    "ind_subtype" i have not specified in *.propertiesToFetch* and i am still able to access it 


func fetchIndustryNamesWithId()->[IndustryData]{ 

     var industryData=[IndustryData]() 
     //fetchRequest.predicate = NSPredicate(format: "firstName == %@", firstName) 
     let fetchRequest = NSFetchRequest<NSManagedObject>(entityName: "Industry") 
     fetchRequest.propertiesToFetch = ["id","industry_name"] 
     do { 
      let tuples = try managedObjectContext.fetch(fetchRequest) 
      for tuple in tuples{ 
       let industryObject=IndustryData() 
       industryObject.id=tuple.value(forKey: "id") as? Int 
       industryObject.industry_name=tuple.value(forKey: "industry_name") as? String 
       industryObject.ind_subtype=tuple.value(forKey: "ind_subtype") as? String 
       industryData.append(industryObject) 
      } 
      return industryData 
     } catch { 
      let fetchError = error as NSError 
      print(fetchError) 
     } 
     return industryData 
    } 
+0

s'il vous plaît partager votre code –

+0

Lorsque vous définissez les propriétés pour aller chercher, il récupère encore des objets de type industrie, mais va tenter d'accélérer l'opération d'extraction que de faire les prorties demandés sur chaque object ... qui aboutit à tuples = [Industry] not [(id, Industry_name)] – SeanLintern88

+0

Vous pouvez modifier ce comportement en spécifiant 'resultType' pour la requête d'extraction en tant que' .DictionaryResultType', auquel cas le fetch renvoie un tableau de dictionnaires (pas de tuples), chaque dictionnaire ayant les clés spécifiées dans 'propertiesToFetch' et les valeurs d'attribut correspondantes. – pbasdf

Répondre

0

Voici comment cela fonctionne. Lorsque vous définissez propertiesToFetch CoreData renvoie ManagedObject en tant que partiellement défectueux. Cela signifie que certaines propriétés sont peuplées, d'autres non. Lorsque vous accédez à une propriété qui n'est pas remplie, les données de base la remplissent pour vous, mais cela aura probablement un impact sur les performances car, dans la plupart des cas, il faudra aller dans le cache des lignes.

Pour plus google info pour CoreData Faulting