2017-04-22 1 views
0

를 업데이트하고 나는이 영역의 모델 클래스가있을 때 영역 속성 값을 보존 다음과 같이나는 스위프트 3 영역의 응용 프로그램에서 일하고 있어요 객체

class User: Object { 
    dynamic var userName = "" 
    dynamic var userURL = "" 
    dynamic var userThumbnailURL = "" 
    dynamic var isRegistered = false 

    var userID = RealmOptional<Int>() 

    override class func primaryKey() -> String? { 
    return "userID" 
    } 
} 

그럼 난 추가 해요 값을. 사용자가 내가 로컬 영역 데이터베이스에서 특정 사용자를 업데이트하고있어 등록을 완료하면 1

let user = User() 
user.userName = fields["userName"] as! String 
user.userURL = fields["userURL"] as! String 
user.userThumbnailURL = fields["userThumbnailURL"] as! String      
user.userID.value = fields["userID"] as? Int 
try! uiRealm.write {     
    uiRealm.add(user, update: true) 
} 

그런

검색어 : 내 서버에서 그들을 얻고 로컬 데이터베이스에 저장하고 있습니다 등록 된 사용자 (isRegistered = true)입니다.

uiRealm.beginWrite() 
let updatingUser = uiRealm.objects(User).filter("userID = %d", self.userId) 
let user = updatingUser.first 
book?.isRegistered = true   
try! uiRealm.commitWrite() 

을하지만 내 문제는 새 서버 응답이 수신 될 때 나는 isRegistered 속성이 false가됩니다 검색어 1을 운영하는 다시 점이다 :이 값은 로컬 영역 데이터베이스에 저장됩니다. 어떻게 이것을 피할 수 있습니까?

+0

RealmOptional 값은 primaryKey 일 수 있습니까? –

+0

그렇습니다. 원격 서버 db와 동일한 기본 키이기 때문에 로컬 데이터베이스에서도 동일합니다. –

답변

1

짧은 대답은 Object 서브 클래스의 인스턴스를 Realm.add(_:update:)으로 전달하여 개체의 부분 업데이트를 수행 할 수 없다는 것입니다. 그 이유는 을 나타내는 방법이 없으므로 Object 하위 클래스의 속성에 대해이 속성을 업데이트하지 마십시오. 사전에 Realm.create(_:value:update:)에 사전을 전달하려는 경우, 주어진 키가 없으면 이 나타나고이 속성은으로 업데이트되지 않습니다.

+0

설명해 주셔서 감사합니다. 나는 이것을 시도했다 uiRealm.create (User.self, 값 : [userName, userURL, userThumbnailURL, isRegistered, userID], update : true) 그러나 isRegistered 값을 제거하면 " 범위 "오류 .. 어떻게 해결할 수 있습니까? –

+0

효과가있었습니다. 배열 색인 범위를 벗어난 오류는 내 실수였습니다. 많은 도움을 주셔서 감사합니다. –

관련 문제