无法在领域数据库中插入第二条记录
问题描述:
我使用领域作为我的后端。我正在存储两个字符串。问题是,当我第一次插入记录时它的工作完美,但是当我再次插入记录时,它显示一个错误。无法在领域数据库中插入第二条记录
我的代码:
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
区块中。但你没有,所以发生异常。
我认为你打算做的是每次按下按钮时创建一个新的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!
+0
非常感谢它的工作 –
试试这个https://stackoverflow.com/questions/30756349/realmswift-rlmexception – karthikeyan