【发布时间】:2016-10-31 12:27:14
【问题描述】:
我正在Swift 3 - xcode 8 做一个项目,我正在尝试使用核心数据在数据库表“用户”中保存和显示一些图像。
此图片是他个人资料中的用户照片。
现在我已经设法保存字符串并从核心数据中显示它们,但我在处理图像时遇到了问题。
这是我目前所拥有的:
将用户添加到核心数据中
func addUser() {
let app = UIApplication.shared.delegate as! AppDelegate
let context = app.persistentContainer.viewContext
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Users")
request.returnsObjectsAsFaults = false
let newUser = NSEntityDescription.insertNewObject(forEntityName: "Users", into: context)
if (firstName.text == "" && lastName.text == "" && contact.text == "" && email.text == "") { //if we have a user profile delete it
deleteUser()
} else { // add a new user profile
newUser.setValue(firstName.text, forKey: "firstName")
newUser.setValue(lastName.text, forKey: "lastName")
newUser.setValue(contact.text, forKey: "contact")
newUser.setValue(email.text, forKey: "email")
//newUser.setValue(imageView.image, forKey: "photo")
//let imgUrl = UIImagePickerControllerReferenceURL as! NSURL
let img = UIImage(named: "f.png")
let imgData = UIImageJPEGRepresentation(img!, 1)
newUser.setValue(imgData, forKey: "photo")
print ("Data added in Users")
}
do {
try context.save()
//print("saved!!!")
Alert.show(title: "Success", message: "Profile Saved", vc: self)
} catch {
// print ("Error")
Alert.show(title: "Error", message: "Profile not Saved", vc: self)
}
}
显示用户来自core data
func showUser() {
let app = UIApplication.shared.delegate as! AppDelegate
let context = app.persistentContainer.viewContext
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Users")
request.returnsObjectsAsFaults = false
do {
let results = try context.fetch(request)
if results.count > 0 {
print("Profile: Data Found:")
for result in results as! [NSManagedObject] {
if let firstNameinData = result.value(forKey: "firstName") as? String{
firstName.text = firstNameinData
print(firstNameinData)
}
if let lastNameinData = result.value(forKey: "lastName") as? String{
lastName.text = lastNameinData
print(lastNameinData)
}
if let contactinData = result.value(forKey: "contact") as? String{
contact.text = contactinData
print(contactinData)
}
if let emailinData = result.value(forKey: "email") as? String{
email.text = emailinData
print(emailinData)
}
if let photoinData = result.value(forKey: "photo") as? UIImage{
imageView.image = photoinData
}
}
} else { // if there is not a user profile
firstName.text = ""
lastName.text = ""
contact.text = ""
email.text = ""
print("Profile : No data found")
}
//print("Loaded!!!")
} catch {
print ("Error Loading")
}
}
我无法显示我保存的图像。 你有什么建议吗?
编辑:Xcode 给我这个消息“与 assetsd 的连接被中断或 assetsd 死了”
【问题讨论】:
-
您为属性
photo保存了(NS)Data对象,而不是UIImage对象。所以我的猜测是:if let photoinData = result.value(forKey: "photo") as? NSData{imageView.image = UIImage(data: photoinData);},或者类似的东西应该可以工作。 -
我做到了。很好,谢谢:)
-
如果让 photoinData = result.value(forKey: "photo") as? NSData{ ImageView.image = UIImage(data: photoinData as Data) }
-
还有一个问题:我正在插入一个用户从他的手机中选择的图像,其中包含一个 imagePickerController。如何添加该图像? (而不是 f.png)。