2015-08-16 9 views
6

के साथ बचत ऐरे मेरे पास एक छोटा ऐप है जिसमें कुछ बचत कार्यशीलताएं हैं। कोठरी:: मैं एक डाटा मॉडल वर्ग कहा जाता हैएनएससीओडी

class Department: NSObject, NSCoding { 
    var deptName = "" 
    var managerName = "" 

    var Task: [Assignment]? // <----- assignment class is in example 2 

    func encodeWithCoder(aCoder: NSCoder) { 

    aCoder.encodeObject(deptName, forKey: "deptName") 
    aCoder.encodeObject(managerName, forKey: "mngName") 
    // aCoder.encodeObject(Task, forKey: "taskArray") 

} 

    required init(coder aDecoder: NSCoder) { 

    super.init() 

    course = aDecoder.decodeObjectForKey("deptName") as! String 
    instructor = aDecoder.decodeObjectForKey("mngName") as! String 
    // Task = aDecoder.decodeObjectForKey("tasKArray") as? [Assignment] 

} 

override init() { 
    super.init() 
} 

} 

तो यह है मुख्य नियंत्रक डेटा मॉडल है जो पहले दृश्य नियंत्रक में, एक यूजर को जोड़ने के लिए "+" बटन दोहन करने के लिए सक्षम है एक विभाग का नाम और प्रबंधक का नाम। समस्या इसे सहेजने के साथ नहीं है क्योंकि मैं इसे NSKeyedArchive का उपयोग करके सफलतापूर्वक सहेजता हूं और ऐप शुरू होने पर इसे वापस लोड करता है।

समस्या:

मैं इस डेटा मॉडल विभागअसाइनमेंट कहा जाता है जो एक शीर्षक और एक नोट चर होता है पर कार्य की एक सरणी जोड़ना चाहते हैं। इस असाइनमेंट के लिए डाटा मॉडल है:

Assignment.swift

class Assignment: NSObject, NSCoding { 
    var title = "" 
    var notes = "" 

     func encodeWithCoder(aCoder: NSCoder) { 

    // Methods 
    aCoder.encodeObject(title, forKey: "Title") 
    aCoder.encodeObject(notes, forKey: "notepad") 

} 

required init(coder aDecoder: NSCoder) { 


// Methods 
    title = aDecoder.decodeObjectForKey("Title") as! String 
    notes = aDecoder.decodeObjectForKey("notepad") as! String 

    super.init() 
} 

override init() { 
    super.init() 
} 


} 

तो क्या मैं अनिवार्य रूप से प्राप्त करने के लिए कोशिश कर रहा हूँ कोई एप्लिकेशन, जहां एक उपयोगकर्ता अलग प्रबंधक के नाम जो काम के साथ अलग-अलग विभागों में प्रवेश करती है अब मेरे ऐप में, लेकिन एक विभाग के भीतर, उपयोगकर्ता असाइनमेंट शीर्षक और नोट्स अनुभाग जोड़ने के लिए "+" बटन पर क्लिक कर सकता है जो क्लिक करने पर संपादन योग्य हो सकता है जिसे मैं बाद में संभाल सकता हूं। ये असाइनमेंट विभाग से विभाग में अलग हैं।

मेरी बड़ी समस्या इस कार्यक्षमता को प्राप्त कर रही है। मुझे यह काम नहीं मिल रहा है।

मैं इस सरणी संपत्ति को विभाग वर्ग का हिस्सा बनना चाहता हूं ताकि प्रत्येक सेल में अपनी तरह की टू-डू सूची हो। कोई मदद निश्चित रूप से मुझे बहुत मदद करेगा। धन्यवाद :)

+0

कोर डेटा के परिणामस्वरूप इस छोटी समस्या के साथ कोई मदद? – Amit

उत्तर

9

आप NSCoder सही ढंग से उपयोग कर रहे हैं, लेकिन पूंजीकरण में दो त्रुटियां हैं। पहली त्रुटि एप्लिकेशन की कार्यक्षमता को प्रभावित करती है, और दूसरी त्रुटि एक स्टाइलिस्ट गलती है। आपने Task को कुंजी "taskArray" के साथ एन्कोड किया, लेकिन आपने इसे "tasKArray" कुंजी के साथ डीकोड करने का प्रयास किया। यदि आप बाद में पूंजी के को ठीक करते हैं, तो आपका कोड काम करेगा।

दूसरी पूंजीकरण त्रुटि एक स्टाइलिस्ट गलती है: Task, स्विफ्ट में सभी संपत्तियों की तरह, को कम कैमेल कैस (llamaCase) में लिखा जाना चाहिए।

इंडेंटेशन पर ध्यान देना सुनिश्चित करें। प्रोग्रामिंग में, विशेष इंडेंटेशन नियम हैं जो हम अनुसरण करते हैं जो कोड को स्पष्ट करने में मदद करते हैं। उचित पूंजीकरण और इंडेंटेशन के साथ सही कोड यहां दिया गया है:

class Department: NSObject, NSCoding { 
    var deptName = "" 
    var managerName = "" 

    var task: [Assignment]? 

    func encodeWithCoder(aCoder: NSCoder) { 
     aCoder.encodeObject(deptName, forKey: "deptName") 
     aCoder.encodeObject(managerName, forKey: "mngName") 
     aCoder.encodeObject(task, forKey: "taskArray") 
    } 

    required init(coder aDecoder: NSCoder) { 
     super.init() 

     course = aDecoder.decodeObjectForKey("deptName") as! String 
     instructor = aDecoder.decodeObjectForKey("mngName") as! String 
     task = aDecoder.decodeObjectForKey("taskArray") as? [Assignment] 
    } 

    override init() { 
     super.init() 
    } 
} 

class Assignment: NSObject, NSCoding { 
    var title = "" 
    var notes = "" 

    func encodeWithCoder(aCoder: NSCoder) { 
     // Methods 
     aCoder.encodeObject(title, forKey: "Title") 
     aCoder.encodeObject(notes, forKey: "notepad") 
    } 

    required init(coder aDecoder: NSCoder) { 
     // Methods 
     title = aDecoder.decodeObjectForKey("Title") as! String 
     notes = aDecoder.decodeObjectForKey("notepad") as! String 

     super.init() 
    } 

    override init() { 
     super.init() 
    } 
} 
+0

मैं अपने कोड को दोबारा करने की कोशिश करूंगा और देख सकता हूं कि यह काम करता है या नहीं। लेकिन अनिवार्य रूप से जो मैं प्राप्त करने की कोशिश कर रहा हूं, डेटा के भीतर डेटा को बचाता है। अभिभावक सेल को टैप करते समय बाल कोशिकाओं के साथ अभिभावक कोशिकाएं, यह 'असाइनमेंट' श्रेणी के साथ बाल कोशिकाओं को 'शीर्षक' और 'नोट्स' रखने के लिए अपने डेटा मॉडल के रूप में दिखाएगी। – Amit

संबंधित मुद्दे