2016-03-12 5 views
1

Я хочу иметь возможность сохранять данные внутри удаленных записей в приложении Couchbase Lite. По the couchbase lite documentation я должен быть в состоянии сохранить атрибут deleted_at вместе со всеми текущими атрибутами с помощью этого кода (слегка измененный для новой эры Swift синтаксисом):Сохранять атрибуты в удаленных документах couchbase

do { 
    try document.update { (newRev) -> Bool in 
     newRev.isDeletion = true 
     newRev["deleted_at"] = currentTimeStamp 

     print("Document deleted at: \(document["deleted_at"])") 
     // prints "Document deleted at: nil" 

     print("Revision deleted at: \(newRev["deleted_at"])") 
     // prints "Revision deleted at: Optional(2016-03-14)" 
     return true 
    } 
} catch let error as NSError { 
    self.handleError(error) 
} 

Однако, если я пытаюсь получить доступ к атрибутам позже они не существуют:

print("Deleted: \(document.isDeleted)") 
// prints "Deleted: Optional(true)" 

print("Deleted at: \(document["deleted_at"])") 
// prints "Deleted at: nil" 

Я уверен, что это должно напечатать метку времени, связанное с атрибутом deleted_at.

Я подумал, что, может быть, couchbase не позволяет доступ к данным из удаленных записей, но восстановление записи не позволяет получать доступ либо:

do { 
    try document.update { (newRev) -> Bool in 
     newRev.isDeletion = false 

     print("Document deleted at: \(document["deleted_at"])") 
     // prints "Document deleted at: nil" 

     print("Revision deleted at: \(newRev["deleted_at"])") 
     // prints "Revision deleted at: nil" 
     return true 
    } 
} catch let error as NSError { 
    self.handleError(error) 
} 

print("Deleted: \(document.isDeleted)") 
// prints "Deleted: Optional(false)" 

print("Deleted at: \(document["deleted_at"])") 
// prints "Deleted at: nil" 

Есть ли что-то я могу сделать, чтобы получить эту работу?

+0

показывает ли свойство внутри блока обновления? – borrrden

+0

@borrrden Да, да. Я обновил вопрос, чтобы отразить это. – caleb

+0

Я на самом деле имел в виду второй блок обновления, а не первый. – borrrden

ответ

1

CBLDocument обычно не загружает удаленную ревизию. В большинстве случаев, если документ был удален, разработчик считает, что он ушел, поэтому CBLDocument.currentRevision вернет нуль вместо возврата «надгробной плиты». Затем это влияет на аксессоры свойств, которые вызывают currentRevision.

Если вы хотите, чтобы вы все равно пересмотрели могилу, поскольку вы сохранили данные в нем, вы можете использовать другие аксессоры, такие как getLeafRevisions или getRevisionHistory.

(FYI, я писал этот код, так что это, вероятно, авторитетный ответ :)

Смежные вопросы