【发布时间】:2017-02-14 16:24:18
【问题描述】:
我在尝试附加一个名为 products 的核心数据实体时遇到问题 - 我使用了与添加 companies 相同的代码,它工作正常。该应用程序的唯一区别是,我猜你可以说只有一个公司的“静态”表格视图,而产品的表格视图是根据点击的公司单元格动态设置的。但我不确定这会如何导致问题。
从昨天开始,我一直在调试/检查整个应用程序的值,似乎无论我尝试更改什么,numberOfRowsInSection 中的products.count 仍然是0。
当用户在三个文本字段中输入新值后点击完成按钮时,我调用了一个名为 handleSave() 的函数,就像我的另一个对象 companies 一样:
func handleSave() {
guard let newProductUrl = NSURL(string: urlTextField.text!) else {
print("error getting text from product url field")
return
}
guard let newProductName = self.nameTextField.text else {
print("error getting text from product name field")
return
}
guard let newProductImage = self.logoTextField.text else {
print("error getting text from product logo field")
return
}
self.productController?.save(name: newProductName, url: newProductUrl as URL, image: newProductImage)
let cc = UINavigationController()
let companyController = CompanyController()
viewController = companyController
cc.viewControllers = [companyController]
present(cc, animated: true, completion: nil)
}
然后这会调用save 函数来追加products:
func save(name: String, url: URL, image: String) {
guard let appDelegate =
UIApplication.shared.delegate as? AppDelegate else {
return
}
let managedContext =
appDelegate.persistentContainer.viewContext
let entity =
NSEntityDescription.entity(forEntityName: "Product",
in: managedContext)!
let product = NSManagedObject(entity: entity,
insertInto: managedContext)
product.setValue(name, forKey: "name")
product.setValue(url, forKey: "url")
product.setValue(image, forKey: "image")
do {
try managedContext.save()
products.append(product)
} catch let error as NSError {
print("Could not save. \(error), \(error.userInfo)")
}
tableView.reloadData()
}
并且在viewWillAppear中获取数据
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
guard let appDelegate =
UIApplication.shared.delegate as? AppDelegate else {
return
}
let managedContext =
appDelegate.persistentContainer.viewContext
let companyToDisplay = self.navigationItem.title!
let fetchRequest =
NSFetchRequest<NSManagedObject>(entityName: "Product")
fetchRequest.predicate = NSPredicate(format:"company.name == %@",companyToDisplay)
do {
products = try managedContext.fetch(fetchRequest)
print(products)
} catch let error as NSError {
print("Could not fetch. \(error), \(error.userInfo)")
}
}
当使用此完全相同的过程添加companies 时,新公司随即出现在表格视图中。但是现在有了产品,情况并非如此。表格视图仍然是空的。我不确定有什么区别,而且我对核心数据的经验不足,我觉得我可以找出问题所在。
非常感谢任何能解决这个问题的人!
【问题讨论】:
-
@doxi45 嗨,您是否尝试过在保存功能中打印值?
-
@TusharSharma ProductController 中的
save函数似乎没有被调用。 IE。如果我在该函数上放置一个断点,它不会中断程序,但是如果我在调用save函数(self.productController?.save)的handleSave()的行上放置一个断点,它会中断。所以我不确定发生了什么。 -
如果这是真的,那么
self.productController就是nil。 -
@d0xi45 我猜你的导航部分正在创建问题,你可以在没有导航的情况下测试它吗?意思是评论你的代码,呈现其他控制器,然后在两个函数上放置断点
-
@TusharSharma 这样做具有相同的结果,除了用户添加值的视图控制器显然没有被解除 - 但是
save上的断点在handleSave()中的self.productController?.save上的断点崩溃时什么也不做
标签: ios swift uitableview core-data