2017-04-07 5 views
0

Ich verwende folgenden Code, um Attribute beim Abrufen von meinem CoreDataModel genannten Industrie zu entfernen. Noch bin ich in der Lage, diese Attribute zuzugreifen, die fetchRequest.propertiesToFetch mit nicht angefordert fetchRequest = NSFetchRequest (entityName: "Industrie") lassen fetchRequest.propertiesToFetch = [ "id", "industry_name"]Abrufen bestimmter Attribute oder Eigenschaften in 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

bitte Ihren Code –

+0

teilen Wenn Sie die Eigenschaften einstellen zu holen, holt es noch Objekte vom Typ Industrie, sondern versucht, die holen zu beschleunigen, indem nur die angeforderten prorties auf jedem bekommen object ... was zu Tupel = [Industry] not [(id, Industry_name)] – SeanLintern88

+0

führt Sie können dieses Verhalten ändern, indem Sie den 'resultType' für die Abrufanforderung als' .DictionaryResultType' angeben. In diesem Fall gibt der Abruf ein Array zurück von Wörterbüchern (keine Tupel), wobei jedes Wörterbuch die im 'propertiesToFetch' angegebenen Schlüssel und die entsprechenden Attributwerte aufweist. – pbasdf

Antwort

0

So funktioniert es. Wenn Sie propertiesToFetch festlegen, gibt CoreData ManagedObject als teilweise fehlerhaft zurück. Das bedeutet, dass einige der Eigenschaften belegt sind, andere nicht. Wenn Sie auf eine Eigenschaft zugreifen, die nicht gefüllt ist, erfüllen die Kerndaten diese für Sie, aber dies hat wahrscheinlich Auswirkungen auf die Leistung, da in den meisten Fällen ein Round-to-Rip-Cache erforderlich ist.

Für weitere Informationen Google für CoreData Faulting

Verwandte Themen