में किसी ऑब्जेक्ट को अपडेट करने का तरीका मैं रीयल स्विफ्ट और चार्ट्स का उपयोग करने के तरीके सीखने की कोशिश कर रहा हूं, इसलिए मैं अंत में उन दोनों ऐप में उनका उपयोग कर सकता हूं जिन्हें मैं बना रहा हूं और मुझे लगता है कि मुझे लगता है कि मुझे लगता है कि मुझे एक समय लगता है क्षेत्र। आखिरकार मैं चार्ट को अपने दायरे डीबी को देखने के लिए योजना बना रहा हूं और फिर डेटा के आधार पर चार्ट प्रदर्शित करता हूं, लेकिन इससे पहले कि मुझे यह देखने की ज़रूरत है कि एक वास्तविक वस्तु मौजूद है या नहीं, अगर ऐसा नहीं है, तो यह तब होता है जब उपयोगकर्ता ऐप का उपयोग उस रिकॉर्ड में 'मायने रखता है' जोड़ता है और तदनुसार चार्ट को अपडेट करता है।रीयल स्विफ्ट
जैसा कि मैं सीख रहा हूं मैंने इसे चरणों में तोड़ दिया है। मैं पहले से ही खोज निकाला है, तो एक रिकार्ड मौजूद है देखने के लिए जाँच करने के लिए कैसे और यदि नहीं इसे इस तरह का निर्माण करने के:
मेरे क्षेत्र मॉडल:
class WorkoutsCount: Object{
dynamic var date: Date = Date()
dynamic var count: Int = Int(0)
}
// function to check if this weeks days have been created in Realm DB yet and creates them if not
let realm = try! Realm()
lazy var workouts: Results<WorkoutsCount> = { self.realm.objects(WorkoutsCount.self)}()
let startOfWeekDate = Date().startOfWeek(weekday: 1)
let nextDay = 24 * 60 * 60
// checks the DB to see if it contains the start of this week
func searchForDB(findDate: Date) -> WorkoutsCount?{
let predicate = NSPredicate(format: "date = %@", findDate as CVarArg)
let dateObject = self.realm.objects(WorkoutsCount.self).filter(predicate).first
if dateObject?.date == findDate{
return dateObject
}
return nil
}
func setThisWeeksDays(){
//if the beginning of this week doesn't exist in the DB then create each day with 0's as the count data
if searchForDB(findDate: startOfWeekDate) == nil{
try! realm.write() {
let defaultWorkoutDates = [startOfWeekDate, startOfWeekDate + TimeInterval(nextDay), startOfWeekDate + TimeInterval(nextDay*2), startOfWeekDate + TimeInterval(nextDay*3), startOfWeekDate + TimeInterval(nextDay*4), startOfWeekDate + TimeInterval(nextDay*5), startOfWeekDate + TimeInterval(nextDay*6)]
for workouts in defaultWorkoutDates {
let newWorkoutDate = WorkoutsCount()
newWorkoutDate.date = workouts
self.realm.add(newWorkoutDate)
}
}
workouts = realm.objects(WorkoutsCount.self)
}
}
मैं सत्यापित किया है कि क्षेत्र ब्राउज़र के माध्यम से अपने कार्यों एप्लिकेशन।
मेरी टू-डू सूची पर अगला यह पता लगाने के लिए है कि "आज की तारीख के रिकॉर्ड" के लिए रिकॉर्ड कैसे अपडेट किया जाए। ऐसा करने के लिए मैंने एक बटन बनाया है, इसलिए जब इसे टैप किया जाए तो ऐसा करने का प्रयास किया जाएगा। मैं googling और googling गया है और सोचने के लिए आया है क्योंकि मैं अपने मॉडल में एक प्राथमिक कुंजी का उपयोग नहीं करता है कि मुझे पहले सवाल में विशिष्ट रिकॉर्ड को हटाना होगा और फिर इसे नए डेटा के साथ फिर से जोड़ना होगा। मैं अपने जीवन के लिए यह नहीं समझ सकता कि इसे रीयल प्रलेखन और यहां तक कि अधिक googling के आधार पर यह कैसे करना है। यह मैं क्या मिल गया है, हालांकि यह काम नहीं करता:
न आया हुआ अपवाद के कारण एप्लिकेशन समाप्त 'अवैध मान:
@IBAction func btnUpdate1MW(_ sender: Any) { if searchForDB(findDate: today) != nil{ if plusOne <= 7{ plusOne += 1 CounterImage1MW.image = UIImage(named: "1MWs-done-\(plusOne)") let realm:Realm = try! Realm() // deletes the original item prior to being updated and added back below let removeTodaysItem = today let workout = realm.objects(WorkoutsCount.self).filter("date = '\(removeTodaysItem)'") if workout.count > 0{ for date in workout{ try! realm.write { realm.delete(date) } } } // adds back the item with an updated count do { let realm = try Realm() try realm.write { realm.create(WorkoutsCount.self, value: ["date": today, "count": plusOne], update: false) } } catch let error as NSError { fatalError(error.localizedDescription) } } print("add to 1MW + 1") } }
जब मैं btnUpdate1MW बटन मैं Xcode में निम्न त्रुटि प्राप्त नल ', कारण:' वर्कआउट्सउंट 'प्रकार की ऑब्जेक्ट पर प्रॉपर्टी' डेट 'के लिए टाइप डेट की अपेक्षित वस्तु, लेकिन प्राप्त: 2017-04-24 07:00:00 +0000'
आप प्राथमिक कुंजी का उपयोग क्यों नहीं करते? जब आप मौजूदा ऑब्जेक्ट को अपडेट करना चाहते हैं तो यह बिल्कुल इन परिदृश्यों के लिए डिज़ाइन किया गया है। किसी ऑब्जेक्ट को हटाने और पुनर्निर्माण करने से उपयोग करना आसान है और यह एक और इष्टतम समाधान भी है। –
क्योंकि जब वापस चला गया और प्राथमिक कुंजी जोड़ दी गई तो मैंने जो भी काम किया था, उसे तोड़ दिया, ऊपर दिए गए कोड के पहले सेट में "real real = try! Realm()" लाइन पर त्रुटि दें और मैं यह नहीं समझ सका इसे ठीक करने के लिए। चूंकि यह मुझे काम करने के लिए एक दिन लगा, ऐसा लगा कि मैं पीछे एक कदम उठा रहा था। – jammyman34
क्या आपने अपने ऐपडिलेगेट, एप्लिकेशनडिडफिनिश लॉन्चिंग विधि में माइग्रेशन ब्लॉक जोड़ा था? यदि नहीं, तो यही कारण है कि आपको कोई त्रुटि क्यों मिली और जब भी आप अपना दायरे मॉडल बदलते हैं तो आपको वही त्रुटि मिल जाएगी। –