无法使用核心数据(Swift)将数据保存/检索到设备

时间:2015-06-19 22:03:33

标签: ios swift core-data

我是iOS开发的新手,并且一直在学习核心数据。我有一个保存数据的模态窗口和一个UITableView来显示它。以下是我在保存数据时所做的工作,我没有错误,但我没有检索到任何数据。

let moc = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext

let entity = NSEntityDescription.entityForName("Name", inManagedObjectContext: moc!)


@IBAction func saveName(sender: AnyObject) {

//Create the managed object to be inserted

    let name = Name(entity: entity!, insertIntoManagedObjectContext: moc!)

    name.title = nameTitle.text
    name.details = nameDetails.text
    name.date = nameDate.date

    var error = NSError?()

    moc?.save(&error)

    //End

    if let problem = error {
            let a = UIAlertView(title: "Sorry..", message: "a problem occurred", delegate: nil, cancelButtonTitle: "Ok")
    } else {
        //DismissWindow
        self.dismissViewControllerAnimated(true, completion: {});
    }

 }

这是我对表视图的提取请求。

@IBOutlet weak var UITable: UITableView!

let moc = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
var names = [Name]()


override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    dismissViewControllerAnimated(true, completion: nil)
    }


override func viewWillAppear(animated: Bool) {
    var error: NSError?

    let request = NSFetchRequest(entityName: "Name")

    let names = moc?.executeFetchRequest(request, error: &error) as! [Name]

    self.UITable.reloadData()

}


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

func tableView(tableView: UITableView,
    numberOfRowsInSection section: Int) -> Int {

        return names.count

}


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

        let cell = tableView.dequeueReusableCellWithIdentifier("Cell") as! UITableViewCell

        let name = names[indexPath.row]

        cell.textLabel?.text = name.title

        return cell
}

1 个答案:

答案 0 :(得分:1)

您似乎没有使用UITableViewController而是实现了自己的表格视图。您需要确保还声明实施了UITableViewDelegateUITableViewDataSource协议,否则数据将不会显示。

此外,在获取数据时,您在names数组前加上关键字let。这会将其转换为viewWillAppear方法中的局部变量。当此方法退出时,它将立即被遗忘。相反,您希望使用已声明的变量names

self.names = ...