定义与先前值冲突 - 同样,何时被覆盖删除?

时间:2016-06-10 23:13:56

标签: swift uitableview

所以我试图从一系列cloudkit下载的项目中制作一个tableview。但是,我有这个简单的“定义与先前值冲突”错误。 cellForRowAtIndexPath函数发生此错误 - 该函数可能与numberOfRowsInSection函数冲突。我试图移动/删除后一个功能的括号,并在末尾放置一个问号/可选......“ - > UITableViewCell?”无济于事。错误可能来自哪里?

另外,根据情况,xcode删除了每个tableview函数的覆盖部分。为什么它有时会停留,什么时候删除?

import UIKit
import CloudKit
class DiningTable: UITableViewController {
 var categories: Array<CKRecord> = []
override func viewDidLoad() {
    super.viewDidLoad()

func getRecords()
    {
        categories = []

        let publicDatabase = CKContainer.defaultContainer().publicCloudDatabase

       let predicate = NSPredicate(value: true)
        let query = CKQuery(recordType: "DiningTypes", predicate: predicate)

        let queryOperation = CKQueryOperation(query: query)
        queryOperation.desiredKeys  = ["Name", "Address", "Picture"]
        queryOperation.qualityOfService = .UserInteractive
        queryOperation.recordFetchedBlock = { (record:CKRecord) -> Void in
            let categoryRecord = record
            self.categories.append(categoryRecord)
    }
        queryOperation.queryCompletionBlock = { (cursor:CKQueryCursor?, error: NSError?) -> Void in
            if (error != nil) {
                print("Failed to get data from iCloud - \(error!.localizedDescription)")
                dispatch_async(dispatch_get_main_queue(), {
                    self.tableView.reloadData()
                })
            }
        }
        publicDatabase.addOperation(queryOperation
    }

func tableView(tableView: UITableView, numberOfRowsInSection: Int) -> Int {
        return self.categories.count
    }
     func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
    {


        let cell = tableView.dequeueReusableCellWithIdentifier("dining") as! DiningTableCell
        let restaurant: CKRecord = categories[indexPath.row]
        cell.RestaurantName?.text = restaurant.valueForKey("Name") as? String


       let img = restaurant.objectForKey("Picture") as! CKAsset

        cell.RestaurantPhoto.image = UIImage(contentsOfFile: img.fileURL.path!)


        return cell
    }
func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "segue1" {    
        if let destViewController = segue.destinationViewController as? RestaurantTable {
            let indexPath = self.tableView.indexPathForSelectedRow!
            destViewController.indexpath1 = indexPath  
        }
    }
    }
func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}
}
}

2 个答案:

答案 0 :(得分:1)

您的整个班级定义嵌套在

override func viewDidLoad() {

功能。在调用super.viewDidLoad()

之后放入一个右大括号

答案 1 :(得分:1)

您确定是代码还是意外删除了某些代码?

因为,就目前而言,您的表视图函数实际上嵌入在viewDidLoad函数中......它们需要是对象级函数。

当您让Xcode缩进代码时,请注意代码的缩进级别(右键单击屏幕并选择Structure-&gt; Re-indent。

import UIKit
import CloudKit

class DiningTable: UITableViewController {
    var categories: Array<CKRecord> = []
    override func viewDidLoad() {
        super.viewDidLoad()
    } // <---  you are missing this close brace here.

    func getRecords()
    {
        categories = []

        let publicDatabase = CKContainer.defaultContainer().publicCloudDatabase

        let predicate = NSPredicate(value: true)
        let query = CKQuery(recordType: "DiningTypes", predicate: predicate)

        let queryOperation = CKQueryOperation(query: query)
        queryOperation.desiredKeys  = ["Name", "Address", "Picture"]
        queryOperation.qualityOfService = .UserInteractive
        queryOperation.recordFetchedBlock = { (record:CKRecord) -> Void in
            let categoryRecord = record
            self.categories.append(categoryRecord)
        }
        queryOperation.queryCompletionBlock = { (cursor:CKQueryCursor?, error: NSError?) -> Void in
            if (error != nil) {
                print("Failed to get data from iCloud - \(error!.localizedDescription)")
                dispatch_async(dispatch_get_main_queue(), {
                    self.tableView.reloadData()
                })
            }
        }
        publicDatabase.addOperation(queryOperation)
    }

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

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
    {
        let cell = tableView.dequeueReusableCellWithIdentifier("dining") as! DiningTableCell
        let restaurant: CKRecord = categories[indexPath.row]
        cell.RestaurantName?.text = restaurant.valueForKey("Name") as? String


        let img = restaurant.objectForKey("Picture") as! CKAsset

        cell.RestaurantPhoto.image = UIImage(contentsOfFile: img.fileURL.path!)


        return cell
    }

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "segue1" {
            if let destViewController = segue.destinationViewController as? RestaurantTable {
                let indexPath = self.tableView.indexPathForSelectedRow!
                destViewController.indexpath1 = indexPath
            }
        }
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}