2011-12-11 13 views
12

के गुणों के माध्यम से Iterating मैं कोर डेटा पर एक नोब हूं, इसलिए यहां जाता है।कोर डेटा - NSManagedObject

मेरे पास कोर डेटा ऑब्जेक्ट है, उदाहरण के लिए छात्र।

छात्र के पास नाम, आयु, डॉब, पता आदि जैसे माने गुण हैं।

अब मुझे इन सभी विशेषताओं को तालिका दृश्य में प्रदर्शित करने की आवश्यकता है।

क्या ऑब्जेक्ट छात्र के माध्यम से पुन: प्रयास करने का कोई आसान तरीका है? या क्या मुझे डेटा को किसी प्रकार के शब्दकोश में परिवर्तित करना है?

यदि मुझे इसे किसी शब्दकोश में रूपांतरित करने की आवश्यकता है तो क्या इसके लिए कोई समर्थन है? या मुझे अपने स्वयं के समारोह को लिखना है।

NSEntityDescription *entity = [myManagedObject entity]; 
NSDictionary *attributes = [entity attributesByName]; 
for (NSString *attribute in attributes) { 
    id value = [myManagedObject valueForKey: attribute]; 
    NSLog(@"attribute %@ = %@", attribute, value); 
} 

ऐसा करने के तरीके के लिए सुराग (प्लस बहुत अधिक) ओले बर्गमैन के से आता है:

आपकी मदद के लिए बहुत धन्यवाद, स्टीफन

उत्तर

22

यहाँ एक NSManagedObject से अधिक पुनरावृति करने के लिए एक बहुत ही आसान तरीका है ब्लॉग: http://oleb.net/blog/2011/05/inspecting-core-data-attributes/

+0

क्या कोई तरीका है कि मैं उपरोक्त के विपरीत बना सकता हूं। मैं [NSManagedObject setObjectForkey: somekey] का उपयोग करके कुछ मूल्य सहेजने में सक्षम होना चाहिए? – pankaj

13

यदि आप मेरे जैसे हैं और स्विफ्ट में इस समस्या को हल करने का प्रयास कर रहे हैं तो मैंने यह कैसे किया।

स्विफ्ट 3:

let request:NSFetchRequest<ENTITY_NAME> 
if #available(iOS 10.0, *){ 
    request = ENTITY_NAME.fetchRequest() as! NSFetchRequest<ENTITY_NAME> 
}else{ 
    request = NSFetchRequest<ENTITY_NAME>(entityName: "ENTITY_NAME") 
} 

do{ 
    let entities = try YOUR_MOC.fetch(request) 
    for item in entities{ 
     for key in item.entity.attributesByName.keys{ 
      let value: Any? = item.value(forKey: key) 
      print("\(key) = \(value)") 
     } 
    } 
}catch{ 

} 

स्विफ्ट 2:

let request = NSFetchRequest(entityName: "ENTITY_NAME") 
    do{ 
     let entities = try YOUR_MOC.executeFetchRequest(request) as! [YOUR_ENTITY] 
     for item in entities{ 
      for key in item.entity.attributesByName.keys{ 
       let value: AnyObject? = item.valueForKey(key) 
       print("\(key) = \(value)") 
      } 

     } 
    }catch{ 

    } 

आप प्राप्त करने के लिए संबंध संस्थाओं कुंजी/के रूप में अच्छी तरह से मान तो आप propertiesByName बजाय attributesByName इसलिए की तरह इस्तेमाल करना चाहिए चाहते हैं:

स्विफ्ट 3:

for key in item.entity.propertiesByName.keys{ 
    let value: Any? = item.value(forKey: key) 
    print("\(key) = \(value)") 
} 

स्विफ्ट 2:

for key in item.entity.propertiesByName.keys{ 
    let value: AnyObject? = item.valueForKey(key) 
    print("\(key) = \(value)") 
} 

बस मूल्य के साथ सावधान रहना करने के लिए याद है, क्योंकि यह एक NSManagedObject है।