Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 无法在域数据库中插入第二条记录_Ios_Swift_Realm - Fatal编程技术网

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!
试试这个