2016-12-05 5 views
6

से ऑब्जेक्ट निकालें मेरे पास रियलम ऑब्जेक्ट है जो JSON प्रतिक्रिया से सूची सहेजता है। लेकिन अब ऑब्जेक्ट को निकालने की आवश्यकता है यदि ऑब्जेक्ट जेएसओएन से सूची में नहीं है। मैं वह कैसे करता हूं? इस दायरे के लिए मेरे initस्विफ्ट

func listItems (dic : Array<[String:AnyObject]>) -> Array<Items> { 
     let items : NSMutableArray = NSMutableArray() 
     let realm = try! Realm() 
     for itemDic in dic { 
      let item = Items.init(item: itemDic) 
       try! realm.write { 
        realm.add(item, update: true) 
       } 
      items.addObject(item) 
     } 
     return NSArray(items) as! Array<Items> 
} 
+0

Btw मैं item.id – Voyager

+0

आप वान हो सकता है के लिए प्राथमिक कुंजी है टी को हटाने के बारे में [दायरे लिंक] (https://realm.io/docs/swift/latest/#deleting-objects) को हटाने के लिए ... –

उत्तर

2

पहला सुझाव है कि मन में आता है JSON से नई वस्तुओं डालने से पहले सभी वस्तुओं को नष्ट करने के लिए है।

लेअर अधिक https://realm.io/docs/swift/latest/#deleting-objects

3

पर क्षेत्र में वस्तुओं को हटाने के बारे में क्या आप वस्तु के लिए एक प्राथमिक कुंजी असाइन है आप डालने रहे हैं, और जब एक नया पार्स JSON प्राप्त करता है, तो यह है कि कुंजी पहले से मौजूद है या नहीं इससे पहले कि आप यह सत्यापित कर सकते हैं इसे जोड़ना

class Items: Object { 
    dynamic var id = 0 
    dynamic var name = "" 

    override class func primaryKey() -> String { 
     return "id" 
    } 
} 

नई ऑब्जेक्ट्स डालने पर पहली बार वास्तविक डेटाबेस को यह सत्यापित करने के लिए क्वेरी करें कि यह मौजूद है या नहीं।

let repeatedItem = realm.objects(Items.self).filter("id = 'newId'") 

if !repeatedItem { 
    // Insert it 
} 
14

कल्पना अपने Items वस्तु एक आईडी संपत्ति है, और आप पुराने मूल्यों नया सेट में शामिल नहीं निकालना चाहते हैं, या तो आप सभी आइटम जोड़ने सिर्फ

let result = realm.objects(Items.self) 
realm.delete(result) 

के साथ सब कुछ नष्ट कर सकते हैं और उसके बाद दायरे में फिर से, या आप भी नया सेट में शामिल नहीं हर आइटम क्वेरी सकता

let items = [Items]() // fill in your items values 
// then just grab the ids of the items with 
let ids = items.map { $0.id } 

// query all objects where the id in not included 
let objectsToDelete = realm.objects(Items.self).filter("id NOT IN %@", ids) 

// and then just remove the set with 
realm.delete(objectsToDelete)