2016-06-16 13 views
0

기본적으로 Firebase에서 데이터를 가져 와서 tableView에 넣고 싶습니다. 그리고 셀이 삭제되면 firebase와 테이블 뷰에서 데이터를 제거하고 싶습니다. 데이터가 심지어 TableView에 나타나지 않는 코드와 나는 무엇이 잘못되었는지를 정말로 알지 못한다 ...? 그때, 다시 스냅 샷을 얻을 배열라는 과정에서 스냅 샷을 저장 한 후 CourseName, AmountOfHoles 및 AddedDate를 포함하는 childByAutoId을 코스에 데이터를 넣어 StructureFirebase 데이터가 TableView에 표시되지 않습니다.

: 도움이된다면

여기 내 데이터베이스 구조입니다 그리고 cellForRowAtIndexPath에있는 셀에 대한 변수를 얻지 만 어떻게 든 셀이 tableView에 표시되지 않습니다 ... 그러면 셀 및 데이터가 commitEditingStyle에서 삭제되지만 셀이 표시되지 않기 때문에 그 위치에 도달하지 않습니다 ...

저는 StackOverflow를 처음 사용합니다. 무언가가 어리 석거나 틀린다면 제게 실례합니다. 전자 상점 ..이 코드

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
if(self.courses.count > 0){ 
tablecount = self.courses.count 
} else { 

tablecount = 0 
self.table.reloaddata() 
} 
return tablecount 
} 
+0

당신의 tableview를 다시로드 ... –

+0

와우 내가 당신을 감사합니다 ... 지금은 바보가 된 기분 ... 작동하지만 지금은보기를 변경하고 다시 가면 다시 셀 중복 ... 그리고 만약 내가 그것을 삭제하지 않습니다 .. 삭제? –

+0

viewDidLoad에서 viewDidAppear 코드를 추가하고 –

답변

0

남자 스냅 샷이 발견 될 때 코드를 삽입해야와

class CoursesViewController: UITableViewController { 

    var ref = FIRDatabaseReference.init() 
    override func viewDidLoad() { 

    ref = FIRDatabase.database().reference() 

    tableView.allowsMultipleSelectionDuringEditing = false 


    //let a = ref.childByAutoId() 
    //a.setValue("hi") 

    } 

    var courses: [FIRDataSnapshot]! = [] 

    override func viewDidAppear(animated: Bool) { 
    super.viewDidAppear(animated) 

    let CoursesRef = ref.child("Courses") 

    CoursesRef.observeEventType(.ChildAdded, withBlock: { snapshpt in 

    self.courses.append(snapshpt) 


    }) 


    } 

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return self.courses.count 
    } 


    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> 
    UITableViewCell { 

    let cell: UITableViewCell! = self.tableView .dequeueReusableCellWithIdentifier("ItemCell", forIndexPath: indexPath) 


    let courseSnap: FIRDataSnapshot! = self.courses[indexPath.row] 

    let course = courseSnap.value 

    let coursename = course?.objectForKey("CourseName") as! String 
    let amountofholes = course?.objectForKey("AmountOfHoles") as! String 
    let addeddate = course?.objectForKey("AddedDate") as! String 

    cell.textLabel?.text = coursename + " " + amountofholes + " Holes" 
    cell.detailTextLabel?.text = addeddate 

    return cell 

    } 

    override func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool { 
    return true 
    } 

    override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { 
    if editingStyle == .Delete { 

    // Find the snapshot and remove the value 
    let courseitem = courses[indexPath.row] 

    courseitem.ref.removeValue() 


    } 
    } 

    @IBAction func addButtonDidTouch(sender: AnyObject) { 


    // Alert View for input 

    let alert = UIAlertController(title: "Course Item",message: "Add Course",preferredStyle: .Alert) 

    let saveAction = UIAlertAction(title: "Save", style: .Default) { (action: UIAlertAction) -> Void in 

    //Get Date String 
    let date = NSDate() 
    print(date) 

    let dateFormatter = NSDateFormatter() 
    dateFormatter.dateFormat = "dd-MM-yyyy 'at' HH:mm" 
    let dateString = dateFormatter.stringFromDate(date) 
    print(dateString) 
    // 
    let courseField = alert.textFields![0] 
    let holesField = alert.textFields![1] 





    let Courses = self.ref.child("Courses").childByAutoId() 

    let course = ["AddedDate": dateString as AnyObject, 
    "CourseName": courseField.text as! AnyObject, 
    "AmountOfHoles": holesField.text as! AnyObject] 

    Courses.setValue(course) 


    } 


    //Cancel 
    let cancelAction = UIAlertAction(title: "Cancel", style: .Default) { (action: UIAlertAction) -> Void in 
    } 

    //TextField placeholder in alert 
    alert.addTextFieldWithConfigurationHandler { 
    (courseField: UITextField!) -> Void in 

    courseField.placeholder = "Course Name" 
    } 
    alert.addTextFieldWithConfigurationHandler { 
    (holesField: UITextField!) -> Void in 

    holesField.placeholder = "Holes (6/9/18)" 
    } 

    //Add alert 
    alert.addAction(saveAction) 
    alert.addAction(cancelAction) 

    presentViewController(alert, animated: true, completion: nil) 

    } 


} 
+0

.. 테이블 뷰를 다시로드하고 observeventtype을 viewdidload()에 넣음으로써 해결했습니다. 그러나이 어딘가를 발견하고 감사드립니다. –

0

체크!

난 당신이 같이 갈 수 있다고 생각 :

CoursesRef.observeEventType(.ChildAdded, withBlock: { snapshot in 
    self.courses.append(snapshot) 
    self.yourTable.insertRowsAtIndexPaths([NSIndexPath(forRow: self.courses.count-1, inSection: 0)], withRowAnimation: .Bottom) 
      }) 
관련 문제