Realm 객체 만들기 - Kotlin SDK
이 페이지의 내용
- 쓰기 트랜잭션(write transaction)
- 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를 참조하세요.
쓰기 트랜잭션(write transaction)
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개 이상의 읽기 및 쓰기 (write) 작업을 포함하는 콜백 함수로 나타냅니다. 트랜잭션 을 실행 하려면 트랜잭션 콜백 을 정의하고 이를 Realm의 쓰기 (write)() 또는 writeBlocking() 메서드에 전달합니다. 이 콜백 내에서 MutableRealm 인스턴스 에 액세스 한 다음 영역 내에서 객체를 만들고, 읽고, 업데이트 하고, 삭제 수 있습니다. 변경 가능한 영역 은 Realm 파일 의 쓰기 가능 상태 를 나타냅니다. 변경 가능한 Realm은 realm.write
또는 realm.writeBlocking
메서드를 통해 자동으로 제공되고 managed 됩니다.
영역은 한 번에 하나의 쓰기 트랜잭션 (write transaction)만 허용합니다. Realm은 변경 가능한 영역의 열린 트랜잭션이 완료될 때까지 다른 스레드에서 다른 쓰기를 차단합니다. 따라서 트랜잭션 내의 영역에서 값을 읽을 때 경쟁 상태가 없습니다.
트랜잭션을 완료하면 Realm은 트랜잭션을 커밋하거나 취소합니다.
Realm은 트랜잭션을 커밋하면 모든 변경 사항을 디스크에 씁니다. 동기화된 Realm의 경우 SDK는 백엔드와의 동기화를 위해 변경 사항을 대기열에 추가합니다.
Realm이 쓰기 트랜잭션(write transaction)을 취소하거나 트랜잭션 작업에서 오류가 발생하면 모든 변경 사항이 삭제됩니다.
참고
동결된 객체
쓰기 클로저에서 반환된 객체는 쓰기 트랜잭션(write transaction)이 완료되면 동결된 객체가 됩니다. 자세한 내용은 동결 아키텍처 - Kotlin SDK를 참조하세요.
managed 객체 및 관리되지 않는 객체
Realm API는 객체를 managed 객체 또는 관리되지 않는 객체로 참조할 수 있습니다. Kotlin SDK로 Realm 객체를 생성하면 해당 객체는 Realm에 복사되어 managed 인스턴스를 생성할 때까지 관리되지 않습니다.
managed 객체 는 영역에서 지속되는 Realm 객체입니다. managed 객체는 열린 영역에서만 액세스할 수 있습니다. 해당 영역이 열려 있는 한 쓰기 트랜잭션 (write transaction) 내의 변경 사항으로 업데이트할 수 있습니다. managed 객체는 해당 객체가 시작된 Realm 인스턴스에 연결되며 다른 영역에 쓸 수 없습니다.
managed 객체와 함께 Realm API를 사용할 수 있습니다. 예를 예시, managed 객체는 다른 객체와 관계를 가질 수 있으며 변경 사항을 관찰할 수 있습니다. 관리 객체 의 managed 되지 않는 복사본을 만들 수도 있으며, 이 페이지 의 Realm 객체 또는 컬렉션의 관리되지 않는 복사본 만들기 섹션을 참조하세요.
관리되지 않는 객체 는 일반 Kotlin 객체처럼 동작하는 Realm 객체의 인스턴스이지만, 영역에서 유지되지 않습니다. 모든 Realm 객체는 쓰기 트랜잭션(write transaction) 내의 영역에 복사할 때까지 관리되지 않습니다. 관리되지 않는 객체와 함께 Realm API를 사용하거나 변경 사항을 관찰할 수 없습니다.
팁
isManaged() 메서드로 객체 가 managed 있는지 확인할 수 있습니다.
Realm 객체 만들기
새로운 객체를 생성하고 영역에 유지하려면 먼저 Realm 객체 유형 정의를 수행해야 합니다. 그런 다음, Realm을 열 때 Realm 스키마에 해당 Realm 객체 유형을 포함합니다.
중요
Realm 객체 유형이 스키마에 있어야 함
영역 스키마에 포함된 Realm 객체 유형의 객체만 쓸 수 있습니다. 스키마에 없는 Realm 객체 유형의 객체를 참고하거나 쓰려고 하면 Realm은 스키마 유효성 검사 오류를 반환합니다.
새로운 객체를 생성하고 영역에 유지하려면 다음을 수행합니다.
realm.write() 로 쓰기 트랜잭션(write transaction)을 엽니다. 또는 realm.writeBlocking().
클래스 생성자를 사용하여 관리되지 않는 객체 인스턴스 를 인스턴스화합니다. 적용 차단 을 사용할 수 있습니다. 한 번에 여러 속성을 구성합니다.
관리되지 않는 객체 인스턴스를 copyToRealm() 에 전달하여 객체 데이터를 영역에 유지합니다. 이 메서드는 객체의 라이브 관리형 인스턴스를 반환합니다.
중요
비대칭 객체 사용 Insert()
비대칭 객체는 영역 에 유지되지 않는 특수 쓰기 전용 객체입니다.
copyToRealm()
을(를) 사용 하지 않습니다 . 대신 쓰기 트랜잭션( 쓰기 트랜잭션 (write transaction) ) 내의insert()
확장 메서드에 비대칭 객체 인스턴스 를 전달합니다. 자세한 내용은 이 페이지 의 비대칭 객체 생성 섹션을 참조하세요.반환된 인스턴스를 통해 지속형 Realm 객체로 작업하세요. 쓰기 트랜잭션(write transaction)이 완료될 때까지 라이브 객체에 액세스할 수 있습니다. 이는 쓰기 전용이고 영역에 유지되지 않는 비대칭 객체에는 적용 되지 않는다는 점에 유의하세요.
특정 기준을 사용하여 영역에 업서트할 수도 있습니다. 자세한 내용 은 Realm 객체 업서트를 참조하세요.
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()
확장 메서드를 사용하여 영역에 삽입합니다.
새 인스턴스 를 만들려면 AsymmetricRealmObject
insert() 를 사용하여 비대칭 객체 유형의 새 객체 를 인스턴스화합니다.
다음 예에서는 새 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 속성이 있는 Realm 객체 유형 Frog
이 있습니다.
class Frog : RealmObject { var _id: ObjectId = ObjectId() var name: String = "" var birthdate: RealmInstant? = null var fliesEaten: MutableRealmInt? = null var favoriteThings: RealmList<RealmAny?> = realmListOf() }
RealmInstant(타임스탬프) 속성 만들기
RealmInstant 속성을 사용하여 새 객체 인스턴스를 만들려면 객체를 인스턴스화하고 다음 중 하나를 사용하여 RealmInstant
속성에 초기값을 전달합니다.
RealmInstant.from(): 유닉스 시간 이후의 epochSeconds 및 나노초
RealmInstant.now(): 유닉스 시간 이후 지금까지의 epochSeconds 및 나노초
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 속성을 사용하여 새 객체 인스턴스를 만들려면 객체를 인스턴스화하고 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 속성 을 사용하여 새 객체 인스턴스 를 만들려면 객체 를 인스턴스화하고 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(혼합) 속성 업데이트를 참조하세요.
collection 속성 만들기
객체 유형을 정의하는 방식에 따라 다음의 지원되는 컬렉션 유형 중 하나로 정의된 속성이 있을 수 있습니다.
RealmList
RealmSet
RealmDictionary
자세한 내용은 컬렉션 속성 정의를 참조하세요.
collection은 변경 가능하므로 쓰기 트랜잭션 (write transaction) 내에서 collection의 요소를 추가하고 제거할 수 있습니다.
collection에는 managed 객체와 관리되지 않는 객체가 모두 포함될 수 있습니다. 컬렉션을 Realm에 복사하면 컬렉션의 관리되는 인스턴스와 관리되지 않는 요소를 포함한 컬렉션 의 모든 요소가 생성됩니다. 관리되지 않는 collection은 해당 Kotlin 클래스처럼 동작하며 영역에 유지되지 않습니다.
팁
생성된 collection에 대한 변경 사항 수신
collection을 생성한 후 변경 사항을 수신하도록 알림 처리기를 등록할 수 있습니다. 자세한 내용 은 Collection 변경 리스너 등록을 참조하세요.
RealmList 만들기
RealmList 속성 을 사용하여 새 객체 인스턴스 를 만들려면 객체 를 인스턴스화하고 지원되는 유형의 값을 RealmList
속성 에 전달합니다. RealmList
가 보유할 수 있는 값 유형 목록은 RealmList를 참조하세요.
realmListOf() 를 사용하여 관리되지 않는 목록을 인스턴스화하거나 list.add( ) 를 사용하여 목록에 요소를 전달할 수 있습니다. list.addAll() 또는 list. 설정하다(). 목록은 영역 에 복사할 때까지 관리되지 않습니다.
다음 예제에서는 여러 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
가 보유할 수 있는 유효한 유형 목록은 RealmSet를 참조하세요.
realmSetOf() 를 사용하여 관리되지 않는 설정하다 를 인스턴스화하거나 설정하다.add() 또는 설정하다 .addAll() 을 사용하여 설정하다 에 요소를 전달할 수 있습니다. 설정하다 는 영역 에 복사할 때까지 관리되지 않습니다.
다음 예제에서는 favoriteSnacks
및 favoriteWeather
세트 속성의 초기값을 사용하여 새 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
속성에 전달합니다. RealmDictionary
는 String
키만 허용하지만 값은 문자열이 아닌 유형일 수 있습니다. 유효한 유형 목록은 RealmMap/RealmDictionary를 참조하세요.
관리되지 않는 사전은 realmDictionaryOf() 또는 realmDictionaryEntryOf() 를 사용하여 인스턴스화할 수 있습니다. 또는 put () 또는 putAll() 을 사용하여 키-값을 전달할 수 있습니다. 사전은 영역 에 복사할 때까지 관리되지 않습니다.
다음 예제에서는 여러 딕셔너리 속성에 대한 초기 키-값을 사용하여 새 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
유형의 중첩 데이터 구조를 만들 수도 있습니다. 내장된 객체와의 관계를 만들려면 이 페이지 의 내장된 객체 만들기 섹션을 참조하세요.
To-One 관계 만들기
대일 관계 속성을 가진 새 객체 인스턴스를 만들려면 두 객체를 인스턴스화하고 참조된 객체를 관계 속성에 전달합니다.
다음 예제에서는 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) }
To-Many 관계 만들기
관계 속성을 가진 새 객체 인스턴스를 만들려면 모든 객체를 인스턴스화하고 참고된 객체를 관계 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 속성에 액세스하여 하위 객체를 가져올 수 있지만 역링크 자체를 직접 수정할 수는 없습니다 . 자세한 내용은 관계 업데이트를 참조하세요.
Realm 객체 또는 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