将 Label 设置为 CoreData 中的字符串
set Label a String which is in CoreData
我正在尝试设置 UILabel.text 一个位于 coredata 中的字符串,但我收到一条错误消息:Instance member "test1" cannot be used on type 'ProfileViewController' did you mean to use a value of this type instead?
有什么解决方案吗?
override func viewWillAppear(_ animated: Bool) {
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Users")
request.returnsObjectsAsFaults = false
do {
let result = try context.fetch(request)
for data in result as! [NSManagedObject] {
test1 = data.value(forKey: "username") as! String
}
} catch {
print("Failed")
}
}
var test1 = String()
let nameLabel: UILabel = {
let label = UILabel()
label.textAlignment = .center
label.text = test1 //error is here
label.font = UIFont.boldSystemFont(ofSize: 26)
label.textColor = .white
return label
}()
试试这个:
override func viewDidAppear() {
super.viewDidLoad()
test() // run the func here
}
func test() {
var test1 = String()
let nameLabel: UILabel = {
let label = UILabel()
label.textAlignment = .center
label.text = test1 //error is here
label.font = UIFont.boldSystemFont(ofSize: 26)
label.textColor = .white
return label
}()
}
创建标签时不需要参考test1
。 UILabel
的 text
属性 是一个可选字符串,所以不赋值是完全合法的。
即使您 could/did 分配 test1
,它也不会帮助您实现您想要的,因为 UIKit
不适用于绑定;在 viewDidAppear
中为 test1
分配新值不会更改标签中的值。
您还需要将 nameLabel
添加到视图控制器 view
并设置一些约束或设置其 frame
;我假设您已在 viewDidLoad
中完成此操作,但未在此处显示。
您只需要:
let nameLabel: UILabel = {
let label = UILabel()
label.textAlignment = .center
label.font = UIFont.boldSystemFont(ofSize: 26)
label.textColor = .white
return label
}()
override func viewWillAppear(_ animated: Bool) {
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Users")
request.returnsObjectsAsFaults = false
do {
let result = try context.fetch(request)
if let result = result as? [NSManagedObject] {
for data in result {
self.nameLabel.text = data.value(forKey:"username") as? String
}
} catch {
print("Failed")
}
super.viewDidAppear(animated) // Don't forget to call super
}
如果您确实想将名称保留在 属性 中,那么您可以使用 didSet
函数实现伪绑定:
let nameLabel: UILabel = {
let label = UILabel()
label.textAlignment = .center
label.font = UIFont.boldSystemFont(ofSize: 26)
label.textColor = .white
return label
}()
var name: String? {
didSet {
self.nameLabel.text = name
}
}
override func viewWillAppear(_ animated: Bool) {
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Users")
request.returnsObjectsAsFaults = false
do {
let result = try context.fetch(request)
if let result = result as? [NSManagedObject] {
for data in result {
self.name = data.value(forKey:"username") as? String
}
} catch {
print("Failed")
}
super.viewDidAppear(animated) // Don't forget to call super
}
我正在尝试设置 UILabel.text 一个位于 coredata 中的字符串,但我收到一条错误消息:Instance member "test1" cannot be used on type 'ProfileViewController' did you mean to use a value of this type instead?
有什么解决方案吗?
override func viewWillAppear(_ animated: Bool) {
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Users")
request.returnsObjectsAsFaults = false
do {
let result = try context.fetch(request)
for data in result as! [NSManagedObject] {
test1 = data.value(forKey: "username") as! String
}
} catch {
print("Failed")
}
}
var test1 = String()
let nameLabel: UILabel = {
let label = UILabel()
label.textAlignment = .center
label.text = test1 //error is here
label.font = UIFont.boldSystemFont(ofSize: 26)
label.textColor = .white
return label
}()
试试这个:
override func viewDidAppear() {
super.viewDidLoad()
test() // run the func here
}
func test() {
var test1 = String()
let nameLabel: UILabel = {
let label = UILabel()
label.textAlignment = .center
label.text = test1 //error is here
label.font = UIFont.boldSystemFont(ofSize: 26)
label.textColor = .white
return label
}()
}
创建标签时不需要参考test1
。 UILabel
的 text
属性 是一个可选字符串,所以不赋值是完全合法的。
即使您 could/did 分配 test1
,它也不会帮助您实现您想要的,因为 UIKit
不适用于绑定;在 viewDidAppear
中为 test1
分配新值不会更改标签中的值。
您还需要将 nameLabel
添加到视图控制器 view
并设置一些约束或设置其 frame
;我假设您已在 viewDidLoad
中完成此操作,但未在此处显示。
您只需要:
let nameLabel: UILabel = {
let label = UILabel()
label.textAlignment = .center
label.font = UIFont.boldSystemFont(ofSize: 26)
label.textColor = .white
return label
}()
override func viewWillAppear(_ animated: Bool) {
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Users")
request.returnsObjectsAsFaults = false
do {
let result = try context.fetch(request)
if let result = result as? [NSManagedObject] {
for data in result {
self.nameLabel.text = data.value(forKey:"username") as? String
}
} catch {
print("Failed")
}
super.viewDidAppear(animated) // Don't forget to call super
}
如果您确实想将名称保留在 属性 中,那么您可以使用 didSet
函数实现伪绑定:
let nameLabel: UILabel = {
let label = UILabel()
label.textAlignment = .center
label.font = UIFont.boldSystemFont(ofSize: 26)
label.textColor = .white
return label
}()
var name: String? {
didSet {
self.nameLabel.text = name
}
}
override func viewWillAppear(_ animated: Bool) {
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Users")
request.returnsObjectsAsFaults = false
do {
let result = try context.fetch(request)
if let result = result as? [NSManagedObject] {
for data in result {
self.name = data.value(forKey:"username") as? String
}
} catch {
print("Failed")
}
super.viewDidAppear(animated) // Don't forget to call super
}