Swift从Realm中删除对象

Voy*_*ger 11 xcode realm swift

我有从JSON响应中保存列表的Realm对象.但是现在我需要删除该对象,如果该对象不再从JSON列表中列出.我是怎么做到的?这是我的领域

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>
}
Run Code Online (Sandbox Code Playgroud)

小智 25

想象你的Items对象有一个id属性,并且你想删除新集合中未包含的旧值,你可以删除所有内容

let result = realm.objects(Items.self)
realm.delete(result)
Run Code Online (Sandbox Code Playgroud)

然后再将所有项目添加到领域,或者您也可以查询新集合中未包含的每个项目

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("NOT id IN %@", ids)

// and then just remove the set with
realm.delete(objectsToDelete)
Run Code Online (Sandbox Code Playgroud)

  • 另外,请在realm.write {}中执行删除操作。像这样:尝试!realm.write {realm.delete(objectsToDelete)} (2认同)

Bat*_*Can 9

func realmDeleteAllClassObjects() {
    do {
        let realm = try Realm()

        let objects = realm.objects(SomeClass.self)

        try! realm.write {
            realm.delete(objects)
        }
    } catch let error as NSError {
        // handle error
        print("error - \(error.localizedDescription)")
    }
}
Run Code Online (Sandbox Code Playgroud)

// 如果要删除一个对象

func realmDelete(code: String) {

    do {
        let realm = try Realm()

        let object = realm.objects(SomeClass.self).filter("code = %@", code).first

        try! realm.write {
            if let obj = object {
                realm.delete(obj)
            }
        }
    } catch let error as NSError {
        // handle error
        print("error - \(error.localizedDescription)")
    }
}
Run Code Online (Sandbox Code Playgroud)


Wil*_* Hu 5

如果我删除类似最高投票答案的答案,将会出现崩溃错误。

Terminating app due to uncaught exception 'RLMException', reason: 'Can only add, remove, or create objects in a Realm in a write transaction - call beginWriteTransaction on an RLMRealm instance first.'
Run Code Online (Sandbox Code Playgroud)

在写事务中删除:

let items = realm.objects(Items.self)
try! realm!.write {
    realm!.delete(items)
}
Run Code Online (Sandbox Code Playgroud)


Dmi*_*try 3

我想到的第一个建议是在从 JSON 插入新对象之前删除所有对象。

了解有关删除 Realm 中对象的更多信息:https://realm.io/docs/swift/latest/#deleting-objects