したがって、私はmealname/mealpic/mealDescriptionをFirebaseDatabaseからtableViewCellに渡したいフードリストプロジェクトを行っています。致命的なエラー:FirebaseDataをtablviewCellに渡すときにインデックスが範囲外になる
それが何かは、このenter image description here
のように見えますここに私のFirebaesDatabase構造が
だとここに私のコードは、ビューコントローラに
override func viewDidLoad() {
super.viewDidLoad()
WeekMenu.delegate = self
WeekMenu.dataSource = self
let url = GIDSignIn.sharedInstance().currentUser.profile.imageURL(withDimension: 100)
let data = try? Data(contentsOf: url!)
userpic.image = UIImage(data:data!)
DataService.ds.REF_MENUDATA.observe(.value, with: { (snapshot) in
if let snapshot = snapshot.children.allObjects as? [FIRDataSnapshot]
{
for snap in snapshot {
print("SNAP: \(snap)")
if let menuDict = snap.value as? Dictionary<String, AnyObject> {
let date = snap.key
let menu = menuContnet(weekmenudate: date, menuData: menuDict as! Dictionary<String, String>)
self.menus.append(menu)
}
}
}
})
self.WeekMenu.reloadData()
}
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 5
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let menu = menus [indexPath.row]
if let cell: WeekMenu = tableView.dequeueReusableCell(withIdentifier: "WeekMenu") as! WeekMenu {
cell.configureCell(menu: menu)
return cell
}
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
performSegue(withIdentifier: "ToVari", sender: nil)
}
だそれは、実行時にクラッシュしてスローされます行の「範囲外のインデックス」エラーlet menu = menus [indexPath.row]
私は範囲エラーの質問のうち、このインデックスを知っては、よくある質問 の一種であるが、私はいくつかは、自分自身を研究なかったし、彼らは本当に
は、誰もが、おそらく間違っていたかもしれないものを指摘する可能性が助けていませんか? おかげ
UPDATE
は、今私は正常私は私のテーブルビューにFirebaseDatabaseに持っているものを渡します。
が、私はDay5に1日目から5つのノードを持っていますが、私のテーブルビューは
私func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return menus.count }
がなぜ起こっていることに一つだけ(3日目)を示しますか? (スナップ:コンテンツの
私のクラスはとてもプリント(「SNAPで次の
class menuContnet {
private var _menuKey: String!
private var _mealDes : String!
private var _mealPic : String!
private var _mealname : String!
private var _menuRef: FIRDatabaseReference!
var menuKey: String{
return _menuKey
}
var mealDes : String {
return _mealDes
}
var mealname : String {
return _mealname
}
var mealPic : String {
return _mealPic
}
init (mealDes: String, mealname: String, mealPic: String) {
self._mealDes = mealDes
self._mealname = mealname
self._mealPic = mealPic
}
init (menuKey: String, menuData : Dictionary <String, String>) {
self._menuKey = menuKey
if let mealname = menuData["mealname"] {
self._mealname = mealname
}
if let mealPic = menuData["mealPic"] {
self._mealPic = mealPic
}
if let mealDes = menuData["mealDes"] {
self._mealDes = mealDes
}
_menuRef = DataService.ds.REF_MENUS.child(_menuKey)
}
}
UPDATE
if let snapshot = snapshot.children.allObjects as? [FIRDataSnapshot]
{
for snap in snapshot {
print ("SNAP: \(snap.key)")
if let menuDict = snap.value as? Dictionary<String, String> {
let key = snap.key
let menu = menuContnet(menuKey: key, menuData: menuDict)
print (key)
self.menus.append(menu)
self.WeekMenu.reloadData()
のようなものです。キー)」)私は、1日目から5日目
にすべてのノードを取得しますが)(プリントキーで私は考えるだけで3日目
を得る 『menuDictは』文は問題に
を引き起こし、場合させた場合私は、私は「もし」と私のコードは、この
let menuDict = snap.value as? Dictionary<String, String>
let key = snap.key
let menu = menuContnet(menuKey: key, menuData: menuDict)
print (key)
self.menus.append(menu)
self.WeekMenu.reloadData()
のように見えるように、それは
「オプションの値をアンラップしながら、予想外にnilを見つけ、」エラーを投げて、実行時にクラッシュして取り除きます
DataService.ds.REF_MENUDATA.observe(.value, with: { (snapshot) in
if let snapshot = snapshot.children.allObjects as? [FIRDataSnapshot]
{
for snap in snapshot {
print("SNAP: \(snap)")
if let menuDict = snap.value as? Dictionary<String, AnyObject> {
let date = snap.key
let menu = menuContnet(weekmenudate: date, menuData: menuDict as! Dictionary<String, String>)
self.menus.append(menu)
self.WeekMenu.reloadData() // This will reload your table to show your newly appended cell one at a time.
}
/*
if menus.count == snap.childrenCount {
self.WeekMenu.reloadData() //Will only reload your table after your entire requested database has been retrieved
}
*/
}
}
})
そして、あなたの変更: - - :私は任意のヒントが
そのuは必ずあなたは 'メニュー 'に5つのアイテムを持っていますか? –