Предотвращение дублирования хранилища в царство - PullRequest
0 голосов
/ 18 ноября 2018

Я использую область для хранения и сохранения своих данных. Все работает отлично, и я только что обнаружил, что пользователи могут хранить дубликаты, что плохо. Я не смог бы создать чек для предотвращения дублирования элементов, любая помощь будет признательна

Функция

func addData(object: OfflineModel)   {    
    try! database.write {
        database.add(object, update: true)
    }
}

//MARK:- Get Offline
func getDataFromDB() -> Results<OfflineModel> {
    offlineItems = database.objects(OfflineModel.self)
    return offlineItems!
}

//MARK:- Create Offline
func createOfflineList(createdDate: Date, photo: Data, title: String, completion: @escaping CompletionHandler) -> Void {        
    REALM_QUEUE.sync {        
        let offlineList = OfflineModel()

        offlineList.createdDate = createdDate
        offlineList.photo = photo
        offlineList.title = title
        OfflineFunctions.instance.addData(object: offlineList)
        completion(true, nil)
    }    
}

Модель

@objc dynamic var id = UUID().uuidString
@objc dynamic var photo: Data? = nil
@objc dynamic var title : String = ""
@objc dynamic var createdDate: Date?

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

1 Ответ

0 голосов
/ 19 ноября 2018

Проблема в том, что в методе createOfflineList вы создаете новый OfflineModel, который генерирует случайное id с использованием UUID().uuidString, и, следовательно, вы не можете иметь дублирующиеся модели с точки зрения Царства, поскольку id,который используется в качестве первичного ключа, всегда будет другим.Вам нужно будет использовать title (или любое другое неслучайное свойство, которое вы действительно хотите использовать для идентификации экземпляров модели) в качестве первичного ключа.

class OfflineModel: Object {
    @objc dynamic var photo: Data? = nil
    @objc dynamic var title : String = ""
    @objc dynamic var createdDate: Date?

    override static func primaryKey() -> String {
        return "title"
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...