Пиша приложение за tvOS. Искам да тествам дали има запис в базата данни на CloudKit.
Опитвам се да направя това, като видя дали има запис с конкретен eventID
.
В идеалния случай искам да извикам функция, която връща true или false:
if isEventInWatchListFile(eventID) {
// ... do things
}
Това, което опитах е следното:
var results = [AnyObject]()
var onList:Bool?
. . .
func isEventInWatchListFile(eventID: String) -> Bool {
let container = CKContainer(identifier: "the container")
let privateDB = container.privateCloudDatabase
let predicate = NSPredicate(format: "eventID == %@",eventID)
let query = CKQuery(recordType: "UserWatchlist", predicate: predicate)
privateDB.performQuery(query, inZoneWithID: nil) { results , error in
guard let results = results else {
// error handler to come
return
}
if results[0]["eventID"] != nil {
self.onList = true
} else {
self.onList = false
}
}
return self.onList!
}
Това се срива с "фатална грешка: неочаквано намерена нула при разопаковане на незадължителна стойност". Мисля, че това е така, защото onList
е заключено в затваряне. Имам два въпроса:
1) Възможно ли е да се предаде onList
на оператора return
и, ако да, как? Прочетох за затваряния в Swift, но не съм сигурен как да приложа прочетеното.
2) Има ли по-добър начин да направя теста, който искам да направя? Подходът ми изглежда тромав.
Аз съм много нов в iOS и Swift. Всяка помощ се получава много добре.