我是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
}
答案 0 :(得分:1)
您似乎没有使用UITableViewController
而是实现了自己的表格视图。您需要确保还声明实施了UITableViewDelegate
和UITableViewDataSource
协议,否则数据将不会显示。
此外,在获取数据时,您在names
数组前加上关键字let
。这会将其转换为viewWillAppear
方法中的局部变量。当此方法退出时,它将立即被遗忘。相反,您希望使用已声明的变量names
。
self.names = ...