2017-10-06 1 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 = "" 
} 
} 

오류 : 당신은 단지 하나의 Msg 오브젝트가 작성해야하기 때문에

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

오류가 발생합니다. 다음은이 이후

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

고마워요. –

관련 문제