6

से विशिष्ट NSManagedObject प्राप्त करें मेरे पास "प्रश्न" नाम के साथ मेरे "ProjName.xcdatamodel" में एक इकाई है। इस इकाई में मेरे पास 5 विशेषताएं हैं ("आइस हॉकी", "वॉलीबॉल", "सॉकर", ...), प्रत्येक transformable टाइप करें। प्रत्येक पंक्ति (विशेषता) एक एनएसएमयूटेबलएरे से भरी जाएगी। मैं इस इकाई में एक विशिष्ट विशेषता का मान प्राप्त करना चाहता हूं। यह मेरा कोड है:स्विफ्ट इकाई (कोर डेटा)

func readQuestionsFromCore(sport:NSString) -> NSMutableArray { 
    var appDel:AppDelegate = (UIApplication.sharedApplication().delegate as AppDelegate) 
    var context:NSManagedObjectContext = appDel.managedObjectContext! 

    var request = NSFetchRequest(entityName: "Questions") 
    request.returnsObjectsAsFaults = false 
    var results: NSArray = context.executeFetchRequest(request, error: nil)! 
    var qArr:NSMutableArray! 
    if results.count > 0 { 
     var res = results[0] as NSManagedObject 
     qArr = res.valueForKey("\(sport)") as NSMutableArray 
     return qArr 
    } else { 
     qArr = [] 
     return qArr 
    } 
} 

यह बिल्कुल के बाद से मैं डेटाबेस (results[0] as NSManagedObject) से परिणामों के पहले सूचकांक बाहर ले काम नहीं करेगा और इस तरह यह अगर उस तत्व valueForKey मैं 'के समान नहीं है दुर्घटना होगा मैं देख रहा हूँ

मुझे एक परिणाम पंक्ति कैसे मिलती है जिसे मैं ढूंढ रहा हूं? अर्थात। "सॉकर", या कम से कम मैं परिणामों के माध्यम से किसी भी तरह से लूप कर सकता हूं और प्रत्येक परिणाम पंक्ति की चाबियों की तुलना कर सकता हूं, इसलिए जब मैं गलत कुंजी के साथ प्रयास करता हूं तो यह क्रैश नहीं होता है? इस तरह कुछ की तरह:

for (res) in results as NSManagedObject { 
    if(res.key == "soccer") { 
     qArr = res.valueForKey("soccer") as NSMutableArray 
     return qArr 
    } 
} 

मुझे आशा है कि मैं अपने स्पष्टीकरण में स्पष्ट हूं!

+0

सहायता वास्तव में सराहना की जाएगी। मैंने इंटरनेट पर खोज की है कि कोई भी भाग्य नहीं है! – user2099024

+0

मुझे लगता है कि आपको अपने "अनुरोध" में एक एनएसपी्रेडिकेट जोड़ने की आवश्यकता है। फिर आप फ़िल्टर कर सकते हैं कि आप किस डेटा को इकाई से वापस प्राप्त करना चाहते हैं। उदाहरण के लिए इस लिंक पर एक नज़र डालें: http://nshipster.com/nspredicate/ –

+0

@ केविन हॉर्गन घर पर कब कोशिश करेंगे! – user2099024

उत्तर

1

valueForKey विधि एक वैकल्पिक देता है, आप के रूप में

नीचे
if let questionsArr = res.valueForKey("\(sport)") as? NSMutableArray { 
    return questionsArr 
} else { 
    return [] 
} 

यह Xcode 6.3.2 में काम करता है if let उपयोग कर सकते हैं, लेकिन जैसे आप बूढ़े एक प्रयोग कर रहे हैं लग रहा है। यदि नवीनतम संस्करण में अपडेट किया गया है।

1

मुझे यकीन नहीं है कि मैं स्पष्ट रूप से समझता हूं कि आप क्या हासिल करने की कोशिश कर रहे हैं। लेकिन अगले फ़ंक्शन का उपयोग करके (केवीसी का उपयोग करके) आप कक्षा गुणों की एक सूची प्राप्त कर सकते हैं और जांच कर सकते हैं कि आपको जिसकी आवश्यकता है, वहां है:

func getPropertyList(#classToInspect: AnyObject.Type) -> [String] 
{ 
    var count : UInt32 = 0 
    let properties : UnsafeMutablePointer <objc_property_t> = class_copyPropertyList(classToInspect, &count) 
    var propertyNames : [String] = [] 
    let intCount = Int(count) 
    for var i = 0; i < intCount; i++ { 
     let property : objc_property_t = properties[i] 
     let propertyName = NSString(UTF8String: property_getName(property))! 
     propertyNames.append(propertyName as String) 
    } 
    free(properties) 
    println(propertyNames) 

    return propertyNames 
} 
संबंधित मुद्दे