2017-10-06 107 views
1

我使用领域作为我的后端。我正在存储两个字符串。问题是,当我第一次插入记录时它的工作完美,但是当我再次插入记录时,它显示一个错误。无法在领域数据库中插入第二条记录

我的代码:

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.

+0

试试这个https://stackoverflow.com/questions/30756349/realmswift-rlmexception – karthikeyan

回答

3

错误发生,因为你只能有一个单一的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

非常感谢它的工作 –

相关问题