Одна из многих проблем, с которыми я сталкиваюсь, - это ошибка:
Type 'DataService' has no member 'dataService'
Я искал, но не могу найти ничего окончательного. Ваша помощь очень ценится. Я не уверен, в чем проблема. Сначала я думал, что служба была изменена на базу данных, но это тоже было неправильно, если только я не ошибаюсь.
import UIKit
import Firebase
class UserFeedTableViewController: UITableViewController {
let ref = Database.database().reference(withPath: "userpost-items")
var userpost = [UserPost]()
override func viewDidLoad() {
super.viewDidLoad()
// observeEventType is called whenever anything changes in the Firebase - new Jokes or Votes.
// It's also called here in viewDidLoad().
// It's always listening.
DataService.dataService.USERPOST_REF.observe(.value, with: { snapshot in
// The snapshot is a current look at our jokes data.
self.userposts = []
if let snapshots = snapshot?.children.allObjects as? [FDataSnapshot] {
for snap in snapshots {
// Make our jokes array for the tableView.
if let postDictionary = snap.value as? Dictionary<String, AnyObject> {
let key = snap.key
let userpost = UserPost(key: key!, dictionary: postDictionary)
// Items are returned chronologically, but it's more fun with the newest jokes first.
self.userpost.insert(userpost, at: 0)
}
}
}
// Be sure that the tableView updates when there is new data.
self.tableView.reloadData()
})
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return userpost.count
}
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let userpost = self.userpost[indexPath.row]
// We are using a custom cell.
if let cell = tableView.dequeueReusableCell(withIdentifier: "UserPostCellTableViewCell") as? UserPostTableViewCell {
// Send the single user post to configureCell() in UserPostCellTableViewCell.
cell.configureCell(userpost: userpost)
return cell
} else {
return UserPostTableViewCell()
}
}
}
Ниже показано сообщение об ошибке, которое я получаю, когда пытаюсь запустить симуляцию. Тип DataService не имеет члена dataService.
Зачем ты это делаешь DataService.dataService.? Ссылка класса должна быть изначально определена как var ref: DatabaseReference!, а затем, возможно, viewDid загрузит self.ref = База данных.database (). ссылка (), а затем во всем остальном классе просто определите путь, который вы хотите наблюдать, например let postRef = self.ref.child ("сообщения"). Вам также следует подумать об обновлении до Firebase 4.





Я опубликовал комментарий, но реальный код более четко сформулирует предложенный мной шаблон. Есть 100 других способов сделать это. (Примечание: Swift 4, Firebase 4)
class UserFeedTableViewController: UITableViewController {
var ref: DatabaseReference!
var userpost = [UserPost]()
override func viewDidLoad() {
super.viewDidLoad()
self.ref = Database.database().reference()
}
func loadPosts() {
let postRef = self.ref.child("posts")
postRef.observe(.value, with: { snapshot in
self.userposts = []
...
}
как я уже сказал, я новичок и использую учебники, Google, чтобы учиться (нужно купить книгу). Я очень благодарен за то, что вы нашли время помочь мне. Кстати, когда я помещаю postRef.observe (.value, с: {снимок в ... он выдает ошибку ... Ярлыки аргументов '(_ :, с :, _ :)' не соответствуют ни одному доступному перегрузки ....
@limskey Да, это верная ошибка. Обратите внимание, что я упоминал об использовании Swift 4 и Firebase 4 - вы используете старую версию Firebase, где функции другие. На этом этапе вам действительно стоит перейти на новую версию. Как только вы поймете этот код, если он помог, не забудьте принять его, чтобы он мог помочь другим!
Эй, есть ли книга или учебное пособие, которое вы бы порекомендовали мне изучить? Я устал искать онлайн-руководства по старым языкам программирования, таким как swift 3. Еще раз спасибо!
@limskey Есть цитата из контента, доступного для Swift 3, но на самом деле Swift 4 актуален и действительно подходит. То же самое и с Firebase - получите текущую версию и сосредоточьтесь на ней.
Можете ли вы опубликовать полное сообщение об ошибке?