Ios 无法在域数据库中插入第二条记录
我使用领域作为我的后端。我正在存储两个字符串。问题是当我第一次插入记录时,它工作正常,但当我再次插入记录时,它显示错误 我的代码:Ios 无法在域数据库中插入第二条记录,ios,swift,realm,Ios,Swift,Realm,我使用领域作为我的后端。我正在存储两个字符串。问题是当我第一次插入记录时,它工作正常,但当我再次插入记录时,它显示错误 我的代码: class ViewController: UIViewController ,UITableViewDelegate,UITableViewDataSource { @IBOutlet weak var tablee:UITableView! @IBOutlet weak var msgTxt:UITextView! @IBOutlet weak var img
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 = ""
}
}
类ViewController:UIViewController、UITableViewDelegate、UITableViewDataSource{
@IBVAR表:UITableView!
@IBOutlet弱var msgTxt:UITextView!
@IBVAR img:UIImageView!
@IBVAR视图:UIView!
设msg=msg()
让realm=try!realm()
lazy-var-msgs:Results={self.realm.objects(Msg.self)}()
重写func viewDidLoad(){
super.viewDidLoad()
//加载视图后,通常从nib执行任何其他设置。
打印(Realm.Configuration.defaultConfiguration.fileURL!)
}
@iAction func msgSend(u发送方:ui按钮){
如果img.image!=nil{
让image:UIImage=self.img.image!
让imageData:NSData=UIImagePngResentation(图像)!作为NSData
设strBase64=imageData.base64EncodedString(选项:.LineLength64个字符)
打印(strBase64)
让pureStr=String(strBase64)
msg.imgurl=pureStr!
}否则{
msg.imgurl=“无”
}
msg.content=msgTxt.text
让realm=try!realm()
做{
尝试realm.write(){
realm.add(msg)
}
}抓住{
}
self.table.reloadData()
self.msgTxt.text=“”
}
}
错误:
由于未捕获的异常“RLMEException”而终止应用程序,原因:“试图在写入事务之外修改对象-首先在RLMRealm实例上调用beginWriteTransaction。”
发生此错误是因为您只创建了一个
Msg
对象。在这里:
let msg = Msg()
由于它位于类之外,因此每次实例化封闭类时,它只会创建一个Msg
实例
当你第一次按下按钮时,一切都很好msg
保存到数据库中。第二次按下按钮时,您正在修改相同的msg
对象,该对象已存在于数据库中!要修改已保存的内容,需要将代码放入write
块中。但是你没有,所以发生了异常
我认为您打算在每次按下按钮时创建一个新的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!
试试这个