我已經使用了火力地堡位置模塊Geofire到SEARCHQUERY我附近的某些位置。該查詢填充一個數組,然後應顯示在表上(通過表重新加載)。不幸的是,在tableview重新加載時,數組並沒有載入數據(count = 0)。 我正在使用異步回調(特別是在整個查詢完成後應該觸發的Geofire中的一個),但儘管我已閱讀了有關函數的內容,但似乎無法使其工作。下面是文檔:https://github.com/firebase/geofire-objc將數據加載到陣列
上我怎樣才能使這項工作順利進行而無需添加一個計時器,耽誤我重裝表的代碼有什麼建議?
下面是一些示例代碼:
var keyArray = [String]()
let query = geoFireSearchQuery(someLocation)
query.observeEventType(.KeyEntered, withBlock: { (key: String!, location: CLLocation!) in
keyArray.append(key)
})
query.observeReadyWithBlock({
self.tableView.reloadData()
self.geofireRef.removeAllObservers()
})
我試圖通過可能的原因工作,利用各種測試中,我現在知道,這裏的問題是數據不加載到陣列快enough-我想用這種異步加載將工作,但我覺得我失去了一些東西(仍在學習)。
解決: 這是一個天生BAD的問題,應該是如何不問問題StackOverlow的一個例子。我不想讓這些細節陷入困境,那是一個錯誤。儘管缺乏信息,但是感謝大家的意見。
我遇到的問題是,我的陣列是這樣創建的: 查詢大型數據集,在陣列上運行的數據,存儲在大對象,存儲計算,那麼大的物體的排序陣列。重計算。
我哈克解決方案是使用keys.count爲多少對象將是最後的(大)陣列對於任何給定的查詢中的計數器。 然後我設置了一個「did Set」變量,每次添加大數組時都會觸發該變量。在Set Set中,我寫了一個簡單的if語句;
static var bigArray = [HugeObjects]() {
didSet {
if self.bigArray.count == self.keys.count {
tableView.reloadData()
}
}
}
的缺點是didSet將觸發每一次的對象被添加到陣列中(30封頂雖然),但我不知道這將如何多大的影響性能。然而,解決方案的工作原理是,在bigArray完全寫入和排序之後,tableView現在會重新加載。
道歉壞的問題。
呼叫tableView.reloadData內.KeyEntered可能? – Shubhank
在KeyEntered中調用tableView.reloadData也不起作用。我嘗試了很多很多的組合,但我想我錯過了一些基本的技術或知識。 – Abhi
是你的tableView無?您應該在numberOfRows方法中添加調試日誌 – Shubhank