Игнорировать записи в FirebaseDB с помощью swift - PullRequest
0 голосов
/ 07 мая 2018

Я работаю над быстрым приложением, которое отображает записи из firebase в контроллер табличного представления.

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

https://i.stack.imgur.com/ENAyM.png

Но теперь каждый раз, когда я пытаюсь запустить приложение, я получаю следующие ошибки

2018-05-07 12:24:24.616490+0100 Loop Guardian[21847:9857567] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<NSTaggedPointerString 0xa030818c015ea1f9> valueForUndefinedKey:]: this class is not key value coding-compliant for the key createdAt.'
*** First throw call stack:
(0x18204b164 0x181294528 0x18204ae2c 0x1829fe434 0x182944e20 0x182944874 0x18297d930 0x1030084b0 0x103008740 0x1030f2840 0x1044892cc 0x10448928c 0x10448dea0 0x181ff3344 0x181ff0f20 0x181f10c58 0x183dbcf84 0x18b6695c4 0x10301de44 0x181a3056c)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb) 

Это происходит только тогда, когда secretKey присутствует в БД. Если я удаляю его, приложение работает нормально.

Мне как-то нужно игнорировать это поле

Вот код, используемый для извлечения записей из БД

func observeMessages() {
    let key = UserDefaults.standard.value(forKey: "uid") as! String
    DBrefs.databaseMessages.child(key).observe(.value, with: { (snapshot) in
            if snapshot.exists() {
                let messageData = snapshot.value as! Dictionary<String, AnyObject>
                self.dataArr = []
                for (key,data) in messageData {
                    self.dataArr.append(data)
                }
                //THIS IS WHERE THE ERROR IS THROWN.. THREAD 1: SIGNAL SIGABRT
                self.dataArr = (self.dataArr as NSArray).sortedArray(using: [NSSortDescriptor(key: "createdAt", ascending: true)]) as [AnyObject]
                self.tblMessage.reloadData()
            }
            else {
            }
        })
}

Любая помощь приветствуется

Спасибо Оливер

1 Ответ

0 голосов
/ 07 мая 2018
for (key,data) in messageData { 
    if (key == "secreyKey") {
       continue;
    }
    self.dataArr.append(data)
}

Также используйте метод Swift для сортировки Array. Не используйте NSArray вместо Array.

Как показано ниже код:

self.dataArr.sorted(by: {$0["createdAt"] as? Int64 ?? 0 < $1["createdAt"] as? Int64 ?? 0})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...