results - realm swift ios 12




Filtrer par jour de NSDate à Realm, Swift (2)

Donc, j'ai mis NSDate dans le modèle Realm:

class GeneralList: Object {
    dynamic var createdAt = NSDate()
    dynamic var notes = ""
}

Comment obtenir, par exemple, toutes les «notes» dans 27.03.2016?


Donc, je trouve un moyen facile:

  1. Créez une extension publique pour String et create function avec un NSDate distinct:

     public static func sepaDate(whatNeed: String) -> String  {
     var currentDate = NSDate()
    let calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)
    
    let dateComponents = calendar!.components([.Day, .Month, .Year, .Minute, .Hour], fromDate: currentDate)
        var forReturn: String = "0"
        switch whatNeed {
            case "day":
                let valu = String(dateComponents.day)
                forReturn = valu
            case "month":
            let valu = String(dateComponents.month)
            forReturn = valu
            case "year":
            let valu = String(dateComponents.year)
            forReturn = valu
            case "hour":
            let valu = String(dateComponents.hour)
            forReturn = valu
            case "minute":
            let valu = String(dateComponents.minute)
            forReturn = valu
            default: print("Error")
        }
        return forReturn
    }
    }
  2. Dans la classe Realm, créez une date distincte:

    dynamic var minute = String.sepaDate("minute")
    dynamic var hour = String.sepaDate("hour")
    dynamic var day = String.sepaDate("day")
    dynamic var month = String.sepaDate("month")
    dynamic var year = String.sepaDate("year") 
  3. Dans l'appel ViewController à prédicat

     let dayday = String(dateComponents.day)
             let monthmonth = String(dateComponents.month)
             let yearyear = String(dateComponents.year)
            let predicate = NSPredicate(format: "day = %@ AND month = %@ AND year = %@", dayday, monthmonth, yearyear)
            generalRecords = uiRealm.objects(GeneralList).filter(predicate) 

J'espère que ça aide quelqu'un ...


Vous pouvez implémenter cette fonction, à partir de la réponse de Rafael

private func createMessageRealmModelFromIncomingMessage(incomingMessage: MessageRestModel) -> MessageRealmModel {
    let messageRealmModel = MessageRealmModel()

    messageRealmModel.id = incomingMessage.id!
    messageRealmModel.messageType = "CHAT_MESSAGE"
    messageRealmModel.value = (incomingMessage.content?.value)!
    messageRealmModel.senderId = incomingMessage.senderId!
    messageRealmModel.recipientId = incomingMessage.recipientId!
    messageRealmModel.sendDate = incomingMessage.sendDate!
    messageRealmModel.serverDeliveryDate = incomingMessage.serverDeliveryDate!
    messageRealmModel.receiverDeliveryDate = NSDate().msFromEpoch()

    return messageRealmModel
}

Puis utilisez-le comme paramètre pour la fonction de filter de Realm comme ceci:

var c = NSDateComponents()
c.year = 2016
c.month = 3
c.day = 27

var date = NSCalendar(identifier: NSCalendarIdentifierGregorian)?.dateFromComponents(c)

let generalListsInDay = realm.objects(GeneralList).filter(self.predicateForDayFromDate(day))

Après l'exécution de ce code, votre generalListsInDay doit contenir tous les GeneralList dans 27.03.2016





realm