문서 메뉴

문서 홈애플리케이션 개발Atlas Device SDK

Realm 객체 만들기 - Kotlin SDK

이 페이지의 내용

  • 쓰기 트랜잭션
  • managed 객체 및 관리되지 않는 객체
  • Realm 객체 만들기
  • Realm 객체 만들기
  • 임베디드 객체 생성
  • 비대칭 객체 생성
  • Realm 속성 만들기
  • RealmInstant(타임스탬프) 속성 만들기
  • MutableRealmInt(카운터) 속성 만들기
  • RealmAny(혼합) 속성 만들기
  • collection 속성 만들기
  • RealmList 만들기
  • RealmSet 속성 만들기
  • 사전 속성 만들기
  • 관계 속성 만들기
  • To-One 관계 만들기
  • To-Many 관계 만들기
  • 역관계 생성
  • Realm 객체 또는 collection의 관리되지 않는 복사본 만들기

이 페이지에서는 영역의 쓰기 트랜잭션(write transaction)과 managed 객체의 개념을 설명한 다음, Kotlin SDK를 사용하여 새 객체를 만들고 로컬 또는 동기화된 영역에 유지하는 방법을 설명합니다. Realm 객체와 이를 정의하는 방법에 대해 자세히 알아보려면 Realm 객체를 참조하세요 .

영역을 열 때 Realm 객체 유형이 포함된 객체를 생성할 수 있습니다. 자세한 내용 은 Realm 열기 또는 동기화된 Realm 열기를 참조하세요.

참고

동기화된 Realm에 쓰기

영역에 새 객체를 쓰는 구문은 로컬 영역이나 동기화 영역에서 동일합니다. 그러나 동기화된 영역 내 쓰기 작업의 성공 여부를 결정하는 데에는 추가 고려 사항이 있습니다. 자세한 내용 은 동기화된 Realm에 데이터 쓰기 - Kotlin SDK를 참조하세요.

Realm은 트랜잭션 측면에서 쓰기를 처리합니다. 모든 쓰기는 트랜잭션 내에서 발생해야 합니다. A transaction is a list of read and write operations that Realm treats as a single indivisible operation: either all of the operations succeed or none of the operations in the transaction take effect.

Realm은 각 트랜잭션을 0개 이상의 읽기 및 쓰기 작업을 포함하는 콜백 함수로 나타냅니다. 트랜잭션을 실행하려면 트랜잭션 콜백을 정의하고 이를 Realm의 write() 또는 writeBlocking() 메서드에 전달합니다. 이 콜백 내에서 MutableRealm 인스턴스에 액세스한 다음 Realm 내에서 객체를 생성, 읽기, 업데이트 및 삭제할 수 있습니다. 변경 가능한 영역 은 Realm 파일의 쓰기 가능 상태를 나타냅니다. 변경 가능한 Realm은 realm.write 또는 realm.writeBlocking 메서드를 통해 자동으로 제공되고 관리됩니다.

영역은 한 번에 하나의 쓰기 트랜잭션 (write transaction)만 허용합니다. Realm은 변경 가능한 영역의 열린 트랜잭션이 완료될 때까지 다른 스레드에서 다른 쓰기를 차단합니다. 따라서 트랜잭션 내의 영역에서 값을 읽을 때 경쟁 상태가 없습니다.

트랜잭션을 완료하면 Realm은 트랜잭션을 커밋하거나 취소합니다.

  • Realm은 트랜잭션을 커밋하면 모든 변경 사항을 디스크에 씁니다. 동기화된 Realm의 경우 SDK는 백엔드와의 동기화를 위해 변경 사항을 대기열에 추가합니다.

  • Realm이 쓰기 트랜잭션(write transaction)을 취소하거나 트랜잭션 작업에서 오류가 발생하면 모든 변경 사항이 삭제됩니다.

참고

동결된 객체

쓰기 클로저에서 반환된 객체는 쓰기 트랜잭션(write transaction)이 완료되면 동결된 객체가 됩니다. 자세한 내용은 동결 아키텍처 - Kotlin SDK를 참조하세요.

Realm API는 객체를 managed 객체 또는 관리되지 않는 객체로 참조할 수 있습니다. Kotlin SDK로 Realm 객체를 생성하면 해당 객체는 Realm에 복사되어 managed 인스턴스를 생성할 때까지 관리되지 않습니다.

  • managed 객체 는 영역에서 지속되는 Realm 객체입니다. managed 객체는 열린 영역에서만 액세스할 수 있습니다. 해당 영역이 열려 있는 한 쓰기 트랜잭션 (write transaction) 내의 변경 사항으로 업데이트할 수 있습니다. managed 객체는 해당 객체가 시작된 Realm 인스턴스에 연결되며 다른 영역에 쓸 수 없습니다.

    관리 객체와 함께 Realm API를 사용할 수 있습니다. 예를 들어, 관리되는 객체는 다른 객체와 관계를 가질 수 있으며 변경 사항을 관찰할 수 있습니다. 관리되는 객체의 관리되지 않는 복사본을 만들 수도 있습니다. 이 페이지 의 Realm 객체 또는 컬렉션의 관리되지 않는 복사본 만들기 섹션을 참조하세요.

  • 관리되지 않는 객체 는 일반 Kotlin 객체처럼 동작하는 Realm 객체의 인스턴스이지만, 영역에서 유지되지 않습니다. 모든 Realm 객체는 쓰기 트랜잭션(write transaction) 내의 영역에 복사할 때까지 관리되지 않습니다. 관리되지 않는 객체와 함께 Realm API를 사용하거나 변경 사항을 관찰할 수 없습니다.

isManaged() 메서드로 객체가 관리되고 있는지 확인할 수 있습니다.

새로운 객체를 생성하고 영역에 유지하려면 먼저 Realm 객체 유형 정의를 수행해야 합니다. 그런 다음, Realm을 열 때 Realm 스키마에 해당 Realm 객체 유형을 포함합니다.

중요

Realm 객체 유형이 스키마에 있어야 함

영역 스키마에 포함된 Realm 객체 유형의 객체만 쓸 수 있습니다. 스키마에 없는 Realm 객체 유형의 객체를 참고하거나 쓰려고 하면 Realm은 스키마 유효성 검사 오류를 반환합니다.

새로운 객체를 생성하고 영역에 유지하려면 다음을 수행합니다.

  1. realm.write() 또는 realm.writeBlocking()을 사용하여 쓰기 트랜잭션(write transaction)을 엽니다.

  2. 클래스 생성자를 사용하여 관리되지 않는 객체 인스턴스를 인스턴스화합니다. 적용 차단 을 사용할 수 있습니다. 한 번에 여러 속성을 구성합니다.

  3. 관리되지 않는 객체 인스턴스를 copyToRealm() 에 전달하여 객체 데이터를 영역에 유지합니다. 이 메서드는 객체의 라이브 관리형 인스턴스를 반환합니다.

    중요

    비대칭 객체 사용 Insert()

    비대칭 객체는 Realm에 유지되지 않는 특수 쓰기 전용 객체입니다. copyToRealm() 을(를) 사용 하지 않습니다 . 대신 쓰기 트랜잭션(write transaction) 내의 insert() 확장 메서드에 비대칭 객체 인스턴스를 전달합니다. 자세한 내용은 이 페이지 의 비대칭 객체 생성 섹션을 참조하세요.

  4. 반환된 인스턴스를 통해 지속형 Realm 객체로 작업하세요. 쓰기 트랜잭션(write transaction)이 완료될 때까지 라이브 객체에 액세스할 수 있습니다. 이는 쓰기 전용이고 영역에 유지되지 않는 비대칭 객체에는 적용 되지 않는다는 점에 유의하세요.

특정 기준을 사용하여 영역에 업서트할 수도 있습니다. 자세한 내용 은 Realm 객체 업서트를 참조하세요.

RealmObject 인스턴스를 만들려면 Realm 객체 유형의 새 객체를 인스턴스화합니다.

다음 예제에서는 realm.write() 블록에서 Frog 객체를 인스턴스화한 다음 인스턴스화된 객체를 copyToRealm() 에 전달하여 managed 인스턴스를 반환합니다.

// Open a write transaction
realm.write {
// Instantiate a new unmanaged Frog object
val unmanagedFrog = Frog().apply {
name = "Kermit"
age = 42
owner = "Jim Henson"
}
assertFalse(unmanagedFrog.isManaged())
// Copy the object to realm to return a managed instance
val managedFrog = copyToRealm(unmanagedFrog)
assertTrue(managedFrog.isManaged())
// Work with the managed object ...
}

EmbeddedRealmObject 인스턴스를 만들려면 내장된 Realm 객체 유형 의 인스턴스를 상위 객체의 속성에 할당합니다. 이는 상위 Realm 객체 유형 내에 내장된 객체를 정의한 방법에 따라 일대일, 일대다 또는 관계 일 수 있습니다. 자세한 내용 은 내장된 객체 정의를 참조하세요.

참고

내장된 객체는 상위 객체 내에 생성해야 합니다.

내장된 객체는 부모 객체가 필요하며 독립적인 Realm 객체로 존재할 수 없습니다 .

내장된 객체는 상위 객체에 대해 엄격한 소유권을 갖습니다. 포함된 객체를 생성한 후에는 다른 상위 객체에 재할당하거나 여러 상위 객체 간에 공유할 수 없습니다 .

다음 예제에서는 Contact 객체와 내장된 Country 객체를 포함하는 내장된 Address 을 사용하여 새 Contact 객체를 인스턴스화합니다.

realm.write {
// Instantiate a parent object with one embedded address
val contact = Contact().apply {
name = "Kermit"
address = EmbeddedAddress().apply {
propertyOwner = Contact().apply { name = "Mr. Frog" }
street = "123 Pond St"
country = EmbeddedCountry().apply { name = "United States" }
}
}
// Copy all objects to the realm to return managed instances
copyToRealm(contact)
}

또한 내장된 Address 객체 목록을 사용하여 새 Business 객체를 인스턴스화하며, 여기에는 Contact 객체와 내장된 Country 객체도 포함됩니다.

realm.write {
// Instantiate a parent object with multiple embedded addresses
val localOffice = EmbeddedAddress().apply {
propertyOwner = Contact().apply { name = "Michigan J. Frog" }
street = "456 Lily Pad Ln"
country = EmbeddedCountry().apply { name = "United States" }
}
val remoteOffice = EmbeddedAddress().apply {
propertyOwner = Contact().apply { name = "Mr. Toad" }
street = "789 Leaping Frog Ave"
country = EmbeddedCountry().apply { name = "Ireland" }
}
val business = Business().apply {
name = "Big Frog Corp."
addresses = realmListOf(localOffice, remoteOffice)
}
// Copy all objects to the realm to return managed instances
copyToRealm(business)
}

버전 1.10.0의 새로운 기능.

다른 Realm 객체와 달리 copyToRealm() 메서드를 사용하여 이를 생성 하지 않습니다 . 이는 비대칭 객체가 쓰기 전용이기 때문이며 영역에서 유지되지 않습니다. 대신 특수 insert() 확장 메서드를 사용하여 영역에 삽입합니다.

새 인스턴스를 만들려면 insert()AsymmetricRealmObject 사용하여 비대칭 객체 유형의 새 객체를 인스턴스화합니다.

다음 예에서는 새 WeatherSensor 객체를 인스턴스화하여 쓰기 트랜잭션(write transaction) 내에서 insert() 에 전달합니다.

// Open a write transaction
realm.write {
// Create a new asymmetric object
val weatherSensor = WeatherSensor().apply {
deviceId = "WX1278UIT"
temperatureInFarenheit = 6.7F
barometricPressureInHg = 29.65F
windSpeedInMph = 2
}
// Insert the object into the realm with the insert() extension method
insert(weatherSensor)
// WeatherSensor object is inserted into the realm, then synced to the
// App Services backend. You CANNOT access the object locally because it's
// deleted from the local realm after sync is complete.
}

삽입되면 비대칭 객체는 App Services 백엔드 및 연결된 Atlas 데이터베이스와 동기화됩니다. managed 데이터에 로컬로 액세스하거나, realm에 추가 또는 제거하거나, 쿼리할 수 없습니다 . 애플리케이션에서 비대칭 객체를 사용하는 방법에 대한 자세한 내용은 Atlas로 데이터 스트리밍 - Kotlin SDK를 참조하세요.

객체 유형을 정의하는 방식에 따라 특수한 Realm별 유형 속성이 있을 수 있습니다.

다음 예제에는 여러 Realm 속성이 있는 Realm 객체 유형 Frog 이 있습니다.

class Frog : RealmObject {
@PrimaryKey
var _id: ObjectId = ObjectId()
var name: String = ""
var birthdate: RealmInstant? = null
var fliesEaten: MutableRealmInt? = null
var favoriteThings: RealmList<RealmAny?> = realmListOf()
}

RealmInstant 속성을 사용하여 새 객체 인스턴스를 만들려면 객체를 인스턴스화하고 다음 중 하나를 사용하여 RealmInstant 속성에 초기값을 전달합니다.

RealmInstant 유형에 대한 자세한 내용은 RealmInstant(타임스탬프)를 참조하세요.

다음 예에서는 birthdate 속성을 사용하여 새 Frog 객체를 인스턴스화하고 초기값을 RealmInstant.from() 에 전달합니다.

realm.write {
// Instantiate a new unmanaged Frog object with a RealmInstant property
val frog = Frog().apply {
name = "Kermit"
// Set an initial value with RealmInstant.from() or RealmInstant.now()
birthdate = RealmInstant.from(1_577_996_800, 0)
}
// Copy the object to the realm to return a managed instance
copyToRealm(frog)
}

MutableRealmInt 속성을 사용하여 새 객체 인스턴스를 만들려면 객체를 인스턴스화하고 MutableRealmInt.create() 를 사용하여 MutableRealmInt 속성에 초기값을 전달합니다. MutableRealmInt 유형에 대한 자세한 내용은 MutableRealmInt(카운터)를 참조하세요.

다음 예에서는 fliesEaten 속성을 사용하여 새 Frog 객체를 인스턴스화하고 초기값을 MutableRealmInt.create() 에 전달합니다.

realm.write {
// Instantiate a new unmanaged Frog object with a MutableRealmInt property
val frog = Frog().apply {
name = "Michigan J. Frog"
// Set an initial value with MutableRealmInt.create()
fliesEaten = MutableRealmInt.create(200)
}
// Copy the object to the realm to return a managed instance
copyToRealm(frog)
}

다형성 RealmAny 속성을 사용하여 새 객체 인스턴스를 만들려면 객체를 인스턴스화하고 RealmAny.create() 를 사용하여 지원되는 유형의 초기값을 RealmAny 속성에 전달합니다. RealmAny 가 보유할 수 있는 값 유형 목록은 RealmAny(혼합)를 참조하세요.

다음 예제에서는 RealmAny 유형의 favoriteThings 목록을 사용하여 새 Frog 객체를 인스턴스화하고 초기값을 RealmAny.create() 에 전달합니다.

realm.write {
// Instantiate a new unmanaged Frog object with a RealmAny property
val frog = Frog().apply {
name = "Kermit"
// Set initial values with RealmAny.create()
favoriteThings = realmListOf(
RealmAny.create(42),
RealmAny.create("rainbows"),
RealmAny.create(Frog().apply {
name = "Kermit Jr."
})
)
}
// Copy the object to the realm to return a managed instance
copyToRealm(frog)
}

객체를 만든 후에는 RealmAny 속성을 사용하려면 저장된 값 유형을 알아야 합니다. 객체를 생성한 후 RealmAny 속성을 업데이트하는 방법을 알아보려면 RealmAny(혼합) 속성 업데이트를 참조하세요.

객체 유형을 정의하는 방식에 따라 다음의 지원되는 컬렉션 유형 중 하나로 정의된 속성이 있을 수 있습니다.

  • RealmList

  • RealmSet

  • RealmDictionary

자세한 내용은 컬렉션 속성 정의를 참조하세요.

collection은 변경 가능하므로 쓰기 트랜잭션 (write transaction) 내에서 collection의 요소를 추가하고 제거할 수 있습니다.

collection에는 managed 객체와 관리되지 않는 객체가 모두 포함될 수 있습니다. 컬렉션을 Realm에 복사하면 컬렉션의 관리되는 인스턴스와 관리되지 않는 요소를 포함한 컬렉션 모든 요소가 생성됩니다. 관리되지 않는 collection은 해당 Kotlin 클래스처럼 동작하며 영역에 유지되지 않습니다.

생성된 collection에 대한 변경 사항 수신

collection을 생성한 후 변경 사항을 수신하도록 알림 처리기를 등록할 수 있습니다. 자세한 내용 은 Collection 변경 리스너 등록을 참조하세요.

RealmList 속성을 사용하여 새 객체 인스턴스를 만들려면 객체를 인스턴스화하고 지원되는 유형의 값을 RealmList 속성에 전달합니다. RealmList 가 보유할 수 있는 값 유형 목록은 RealmList를 참조하세요.

realmListOf() 를 사용하여 관리되지 않는 목록을 인스턴스화하거나 list.add(), list.addAll() 또는 list.set() 사용 하여 요소를 목록에 전달할 수 있습니다. 목록은 영역에 복사할 때까지 관리되지 않습니다.

다음 예제에서는 여러 RealmList 속성에 대한 초기값을 사용하여 새 Frog 객체를 인스턴스화합니다.

realm.write {
// Instantiate a new unmanaged Frog object with a RealmList property
val frog = Frog().apply {
name = "Kermit"
// Set values for each unmanaged list
favoritePonds.addAll(realmListOf(
Pond().apply { name = "Picnic Pond" },
Pond().apply { name = "Big Pond" }
))
favoriteForests.add(EmbeddedForest().apply { name = "Hundred Acre Wood" })
favoriteWeather = realmListOf("rain", "snow")
}
// Copy all objects to the realm to return managed instances
copyToRealm(frog)
}

RealmSet 속성을 사용하여 새 객체 인스턴스를 만들려면 객체를 인스턴스화하고 지원되는 유형의 값을 RealmSet 속성에 전달합니다. RealmSet 가 보유할 수 있는 유효한 유형 목록은 RealmSet를 참조하세요.

realmSetOf() 를 사용하여 관리되지 않는 세트를 인스턴스화하거나 set.add() 또는 set.addAll()을 사용하여 요소를 세트에 전달할 수 있습니다. 세트는 영역에 복사할 때까지 관리되지 않습니다.

다음 예제에서는 favoriteSnacksfavoriteWeather 세트 속성의 초기값을 사용하여 새 Frog 객체를 인스턴스화합니다.

realm.write {
// Instantiate a new unmanaged Frog object with RealmSet properties
val frog = Frog().apply {
name = "Kermit"
// Set initial values to each unmanaged set
favoriteSnacks.addAll(setOf(
Snack().apply { name = "flies" },
Snack().apply { name = "crickets" },
Snack().apply { name = "worms" }
))
favoriteWeather.add("rain")
}
// Copy all objects to the realm to return managed instances
copyToRealm(frog)
}

RealmDictionary 속성을 사용하여 새 객체 인스턴스를 만들려면 객체를 인스턴스화하고 지원되는 유형의 키-값 쌍을 RealmDictionary 속성에 전달합니다. RealmDictionaryString 키만 허용하지만 값은 문자열이 아닌 유형일 수 있습니다. 유효한 유형 목록은 RealmMap/RealmDictionary를 참조하세요.

관리되지 않는 사전은 realmDictionaryOf() 또는 realmDictionaryEntryOf() 를 사용하여 인스턴스화할 수 있습니다. 또는 put () 또는 putAll() 을 사용하여 키-값을 전달할 수 있습니다. 딕셔너리는 Realm에 복사할 때까지 관리되지 않습니다.

다음 예제에서는 여러 딕셔너리 속성에 대한 초기 키-값을 사용하여 새 Frog 객체를 인스턴스화합니다.

realm.write {
val frog = Frog().apply {
name = "Kermit"
// Set initial key-values to each unmanaged dictionary
favoriteFriendsByPond = realmDictionaryOf(
"Picnic Pond" to Frog().apply { name = "Froggy Jay" },
"Big Pond" to Frog().apply { name = "Mr. Toad" }
)
favoriteTreesInForest["Maple"] = EmbeddedForest().apply {
name = "Hundred Acre Wood"
}
favoritePondsByForest.putAll(
mapOf(
"Silver Pond" to "Big Forest",
"Big Lake" to "Elm Wood",
"Trout Pond" to "Sunny Wood"
)
)
}
// Copy all objects to the realm to return managed instances
copyToRealm(frog)
}

Realm에서는 지도 키에 . 또는 $ 문자를 사용할 수 없습니다. 백분율 인코딩 및 디코딩을 사용하여 허용되지 않는 문자 중 하나가 포함된 지도 키를 저장할 수 있습니다.

// Percent encode . or $ characters to use them in map keys
val mapKey = "Hundred Acre Wood.Northeast"
val encodedMapKey = "Hundred Acre Wood%2ENortheast"

Realm 객체 유형을 정의하는 방법에 따라 다른 Realm 객체를 참고하는 속성이 있을 수 있습니다. 이는 to-one, to-many 또는 관계 일 수 있습니다. 객체 모델에서 관계를 정의하는 방법에 대한 자세한 내용은 관계 정의를 참조하세요 .

한 Realm 객체를 다른 Realm 객체 내에 직접 포함하여 EmbeddedRealmObject 유형의 중첩 데이터 구조를 만들 수도 있습니다. 내장된 객체와의 관계를 만들려면 이 페이지 의 내장된 객체 만들기 섹션을 참조하세요.

대일 관계 속성을 가진 새 객체 인스턴스를 만들려면 두 객체를 인스턴스화하고 참조된 객체를 관계 속성에 전달합니다.

다음 예제에서는 Pond 객체를 참고하는 favoritePond 속성과 다른 Frog 객체를 참고하는 bestFriend 속성을 사용하여 새 Frog 객체를 인스턴스화합니다.

realm.write {
// Instantiate a new unmanaged Frog object with to-one
// relationship with a Realm object
val frog = Frog().apply {
name = "Kermit"
age = 12
favoritePond = Pond().apply { name = "Picnic Pond" }
bestFriend = Frog().apply { name = "Froggy Jay" }
}
// Copy all objects to the realm to return managed instances
copyToRealm(frog)
}

관계 속성을 가진 새 객체 인스턴스를 만들려면 모든 객체를 인스턴스화하고 참고된 객체를 관계 collection 속성에 전달합니다.

다음 예제에서는 Frog 객체 세트를 참조하는 frogsThatLiveHere 속성과 Pond 객체 목록을 참조하는 nearByPonds 속성을 사용하여 새 Forest 객체를 인스턴스화합니다.

realm.write {
// Instantiate a new unmanaged Forest object with to-many
// relationship with multiple Realm objects
val forest = Forest().apply {
name = "Froggy Forest"
frogsThatLiveHere = realmSetOf(
Frog().apply { name = "Kermit" },
Frog().apply { name = "Froggy Jay" }
)
nearbyPonds = realmListOf(
Pond().apply { name = "Small Picnic Pond" },
Pond().apply { name = "Big Pond" }
)
}
// Copy all objects to the realm to return managed instances
copyToRealm(forest)
}

관계 속성을 가진 새 객체 인스턴스를 만들려면 부모 객체를 인스턴스화하고 참고 자식 객체를 역링크 collection 속성에 전달합니다.

다음 예제에서는 Post 객체 목록을 참조하는 역링크 posts 속성을 사용하여 새 User 객체를 인스턴스화합니다.

realm.write {
// Instantiate a new unmanaged User object with to-many
// relationship with multiple Realm objects
val post1 = Post().apply {
title = "Forest Life"
}
val post2 = Post().apply {
title = "Top Ponds of the Year!"
}
val user = User().apply {
name = "Kermit"
posts = realmListOf(post1, post2)
}
// Copy all objects to the realm to return managed instances
copyToRealm(user)
}

객체를 생성한 후에는 역링크 collection 속성에 액세스하여 하위 객체를 가져올 수 있지만 역링크 자체를 직접 수정할 수는 없습니다 . 자세한 내용은 관계 업데이트를 참조하세요.

관리 대상 객체 또는 컬렉션을 copyFromRealm() 에 전달하여 관리되지 않는 복사본을 만들 수 있습니다. 이 메서드는 객체 또는 컬렉션의 관리되지 않는 메모리 내 복사본을 반환합니다. 컬렉션의 경우 지정된 depth 까지 참조된 모든 객체를 포함하는 딥 카피입니다.

다음 예에서는 두 개의 Frog 객체 목록을 포함하는 기존 managed Pond 객체의 비관리형 복사본을 만듭니다. 영역에서 객체를 복사한 후 복사본이 관리되지 않는 복사본이고 참고 Frog 객체가 모두 포함되어 있는지 확인합니다.

realm.writeBlocking {
// Fetch the managed object you want to copy
val managedPond = query<Pond>("name == $0", "Big Pond").find().first()
assertTrue(managedPond.isManaged())
// Create an unmanaged copy of the object
val unmanagedPond = copyFromRealm(managedPond)
assertFalse(unmanagedPond.isManaged())
Log.v("Unmanaged pond name: ${unmanagedPond.name}")
// Confirm the unmanaged copy contains all elements
// in the copied object's RealmList
val unmanagedFrogs = unmanagedPond.frogsThatLiveHere
assertFalse(unmanagedFrogs[0].isManaged())
assertFalse(unmanagedFrogs[1].isManaged())
assertEquals(2, unmanagedFrogs.size)
Log.v("Unmanaged frogs: ${unmanagedFrogs[0].name}, ${unmanagedFrogs[1].name}")
}
Unmanaged pond name: Big Pond
Unmanaged frogs: Kermit, Froggy Jay
← 데이터 읽기 및 쓰기 - Kotlin SDK