2014-07-26 1 views
2

영역의 RLMObject의 기존 인스턴스를 업데이트하려고합니다. 내가 할 수있는 방법을 찾을 수 없습니다업데이트 RLMObject는 Swift/IOS입니다.

..

나에게 예를주십시오.

내가 저장하고 개체 삭제 할 수 있습니다했지만 사용하여 객체를 업데이트하는 방법을 알아낼 수 없습니다 :

//Find Existing 
let predicate = NSPredicate(format: "formname = %@",formname) 
var localTypes = FormTypeLocal.objectsWithPredicate(predicate) 
if (localTypes.count == 1){ 
var existingForm : FormTypeLocal = localTypes[0] as FormTypeLocal  
existingForm.customProp = "newVal" 
//Now I need to update????? 

let realm = RLMRealm.defaultRealm() 
// 
// Add to the Realm inside a transaction 
realm.beginWriteTransaction() 
realm.addObject(newForm) 
realm.commitWriteTransaction() 
//Delete 
realm.beginWriteTransaction() 
realm.deleteObject(newForm) 
realm.commitWriteTransaction() 
+0

안녕하세요. 지금까지 시도한 내용 및/또는 지금까지 정보를 찾은 곳을 표시하여 사람들이 시도한 내용을 볼 수 있도록하십시오. – mc110

+0

@ mc110 : 내가 수행 한 작업을 추가했습니다. – weePee

+1

알아 냈습니다 ... RLMObject의 소품을 업데이트하면 즉시 중단됩니다 ... 모든 트랜잭션을 처리하여 원자 적으로 유지합니다. realm.beginWriteTransaction() fm.formdescription = formdescription fm.updatedAt = updatedAt fm.objectId = OBJECTID realm.commitWriteTransaction() – weePee

답변

6

당신이 올바른 궤도에있어, 당신은 당신의 업데이트에 완료 확인해야 쓰기 트랜잭션.

영역의 경우 쓰기 트랜잭션에서 영역 객체를 수정/업데이트하는 경우 해당 변경 사항이 유지됩니다. 예를 들어 :

let realm = RLMRealm.defaultRealm() 
realm.beginWriteTransaction() 
// Find objects 
var localTypes = FormTypeLocal.objectsWhere("formname = \(formname)") 
// Update one of those objects 
var existingForm = localTypes[0] as FormTypeLocal 
existingForm.customProp = "newVal" 
// Wrap up transaction 
realm.commitWriteTransaction() 

우리는 as FormTypeLocal이 미래에 필요하지 않을 것이다, 그래서 제네릭을 지원하기 위해 우리의 스위프트 인터페이스에 노력하고 있습니다.

+0

는 보조 노트에 ... 정말 감사 : 내가없이 업데이트를 할 경우 어떤 일이 발생 쓰기 트랜잭션? 업데이트가 손실 되었습니까? – weePee

+0

나는 Realm의 단순함을 좋아하지만 인스턴스를 repo에 전달하여 객체를 유지하는 저장소 설계가 있습니다. 그러면 repo가 ​​데이터 저장소의 객체를 생성하거나 업데이트합니다. 나는 Realm이 db persistence에 사용되는 몇 가지 구현 (가짜, 파일 등)을 가지고 있습니다. 이제 beginWriteTransaction 요구 사항 (비록 내가 완전히 이해할지라도)이 절박한 지점에 놓입니다. 객체를 수정 한 다음 repo에 전달할 수 없기 때문입니다. 렐름가는 것은 실수가 아니라면 "시작"단계를 추가하여 내 obj를 수정하는 모든 곳에서 내 앱을 변경해야합니다. –