gpt4 book ai didi

ios - 无法在 Realm 数据库中插入第二条记录

转载 作者:搜寻专家 更新时间:2023-11-01 06:31:36 24 4
gpt4 key购买 nike

我正在使用 Realm 作为我的后端。我正在存储两个字符串。问题是当我第一次插入记录时它工作正常但是当我再次插入记录时它显示错误。

我的代码:

class ViewController: UIViewController ,UITableViewDelegate,UITableViewDataSource {

@IBOutlet weak var tablee:UITableView!
@IBOutlet weak var msgTxt:UITextView!
@IBOutlet weak var img:UIImageView!
@IBOutlet weak var vieww:UIView!


let msg = Msg()
let realm = try! Realm()
lazy var msgs: Results<Msg> = { self.realm.objects(Msg.self) }()

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
print(Realm.Configuration.defaultConfiguration.fileURL!)
}
@IBAction func msgSend(_ sendeR:UIButton) {
if img.image != nil {
let image : UIImage = self.img.image!
let imageData:NSData = UIImagePNGRepresentation(image)! as NSData
let strBase64 = imageData.base64EncodedString(options: .lineLength64Characters)
print(strBase64)
let pureStr = String(strBase64)
msg.imgurl = pureStr!
} else {
msg.imgurl = "none"
}
msg.content = msgTxt.text
let realm = try! Realm()
do {
try realm.write() {
realm.add(msg)
}
} catch {

}
self.tablee.reloadData()
self.msgTxt.text = ""
}
}

错误:

Terminating app due to uncaught exception 'RLMException', reason: 'Attempting to modify object outside of a write transaction - call beginWriteTransaction on an RLMRealm instance first.

最佳答案

错误的发生是因为您只创建了一个Msg 对象。这里:

let msg = Msg()

因为它被放置在一个类之外,它只会在每次实例化封闭类时创建一个 Msg 实例。

当您第一次按下按钮时,一切正常。 msg 被保存到数据库中。当您第二次按下按钮时,您正在修改同一个 msg 对象,该对象已经存在于数据库中!要修改已保存的内容,您需要将代码放在 write block 中。但是你没有,所以发生了异常。

我认为您打算做的是在每次按下按钮时创建一个新的 Msg 对象。为此,您需要将 msg 声明为局部变量,或在 IBAction 中重新分配 msg

@IBAction func msgSend(_ sendeR:UIButton) {
msg = Msg() // this line creates a new Msg object so as not to modify the same one over and over.
if img.image != nil {
let image : UIImage = self.img.image!
let imageData:NSData = UIImagePNGRepresentation(image)! as NSData
let strBase64 = imageData.base64EncodedString(options: .lineLength64Characters)
print(strBase64)
let pureStr = String(strBase64)
msg.imgurl = pureStr!

关于ios - 无法在 Realm 数据库中插入第二条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46598352/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com