Skip to content

Exception on saving of Unmanaged Object with Embedded Object #6921

Open
@pavel-ship-it

Description

@pavel-ship-it

Crash during upsert of an existing object with a list of EmbeddedObject inside.

Goals / Expected Results

I can upsert a record.

Actual Results

Exception: ** Terminating app due to uncaught exception 'RLMException', reason: 'Cannot add an existing managed embedded object to a List.'**

Steps for others to Reproduce

Create unmanaged copy of existing object with the property - list of EmbeddedObject's children objects.
Try to add it with UpdatePolicy.update

Workaround

Create a deep copy of a target object.

Code Sample

class Address: EmbeddedObject {
    @objc dynamic var street: String? = nil
    @objc dynamic var city: String? = nil
    @objc dynamic var country: String? = nil
    @objc dynamic var postalCode: String? = nil
}

// Define an object with an array of embedded objects
class Business: Object {
    @objc dynamic var _id = ObjectId.generate()
    @objc dynamic var name = ""
    let addresses = List<Address>() // Embed an array of objects
    
    override static func primaryKey() -> String? {
        return "_id"
    }
    
    convenience init(name: String, addresses: [Address]) {
        self.init()
        self.name = name
        self.addresses.append(objectsIn: addresses)
    }
}

    let b = realm.objects(Business.self).first!
        
    //make an unmanaged copy of a business
    let someBusiness = Business(value: b)
    someBusiness.name = "New Business Name"

    try! realm.write {
        realm.add(someBusiness, update: .modified)
    }

Stack trace

*** First throw call stack:
(
	0   CoreFoundation                      0x00007fff2043a126 __exceptionPreprocess + 242
	1   libobjc.A.dylib                     0x00007fff20177f78 objc_exception_throw + 48
	2   delcrash                            0x00000001036918c5 _ZN18RLMAccessorContext12createObjectEP11objc_objectN5realm12CreatePolicyEbNS2_6ObjKeyE + 3125
	3   delcrash                            0x00000001036ea20d RLMAddObjectToRealm + 285
	4   delcrash                            0x00000001038876c4 $s10RealmSwift0A0V3add_6updateySo0aB6ObjectC_AC12UpdatePolicyOtF + 1252
	5   delcrash                            0x00000001034fc24b $s8delcrash14ViewControllerC9addActionyyFyyXEfU_ + 251
	6   delcrash                            0x00000001034fb84f $ss5Error_pIgzo_ytsAA_pIegrzo_TR + 15
	7   delcrash                            0x00000001034fc2a4 $ss5Error_pIgzo_ytsAA_pIegrzo_TRTA.1 + 20
	8   delcrash                            0x00000001038866cb $s10RealmSwift0A0V5write16withoutNotifying_xSaySo20RLMNotificationTokenCG_xyKXEtKlF + 299
	9   delcrash                            0x00000001034fbfb8 $s8delcrash14ViewControllerC9addActionyyF + 1112
	10  delcrash                            0x00000001034fbace $s8delcrash14ViewControllerC6runAddyyF + 46
	11  delcrash                            0x00000001034fb0d3 $s8delcrash14ViewControllerC11viewDidLoadyyF + 723
	12  delcrash                            0x00000001034fba8b $s8delcrash14ViewControllerC11viewDidLoadyyFTo + 43
	13  UIKitCore                           0x00007fff23f37de3 -[UIViewController _sendViewDidLoadWithAppearanceProxyObjectTaggingEnabled] + 88
	14  UIKitCore                           0x00007fff23f3c6ca -[UIViewController loadViewIfRequired] + 1084
	15  UIKitCore                           0x00007fff23f3cab4 -[UIViewController view] + 27
	16  UIKitCore                           0x00007fff246ac28b -[UIWindow addRootViewControllerViewIfPossible] + 313
	17  UIKitCore                           0x00007fff246ab978 -[UIWindow _updateLayerOrderingAndSetLayerHidden:actionBlock:] + 219
	18  UIKitCore                           0x00007fff246ac93d -[UIWindow _setHidden:forced:] + 362
	19  UIKitCore                           0x00007fff246bf950 -[UIWindow _mainQueue_makeKeyAndVisible] + 42
	20  UIKitCore                           0x00007fff248fa524 -[UIWindowScene _makeKeyAndVisibleIfNeeded] + 202
	21  UIKitCore                           0x00007fff23ace736 +[UIScene _sceneForFBSScene:create:withSession:connectionOptions:] + 1671
	22  UIKitCore                           0x00007fff2466ed47 -[UIApplication _connectUISceneFromFBSScene:transitionContext:] + 1114
	23  UIKitCore                           0x00007fff2466f076 -[UIApplication workspace:didCreateScene:withTransitionContext:completion:] + 289
	24  UIKitCore                           0x00007fff2415dbaf -[UIApplicationSceneClientAgent scene:didInitializeWithEvent:completion:] + 358
	25  FrontBoardServices                  0x00007fff25a6a136 -[FBSScene _callOutQueue_agent_didCreateWithTransitionContext:completion:] + 391
	26  FrontBoardServices                  0x00007fff25a92bfd __94-[FBSWorkspaceScenesClient createWithSceneID:groupID:parameters:transitionContext:completion:]_block_invoke.176 + 102
	27  FrontBoardServices                  0x00007fff25a77b91 -[FBSWorkspace _calloutQueue_executeCalloutFromSource:withBlock:] + 209
	28  FrontBoardServices                  0x00007fff25a928cb __94-[FBSWorkspaceScenesClient createWithSceneID:groupID:parameters:transitionContext:completion:]_block_invoke + 352
	29  libdispatch.dylib                   0x00000001054dfa88 _dispatch_client_callout + 8
	30  libdispatch.dylib                   0x00000001054e29d0 _dispatch_block_invoke_direct + 295
	31  FrontBoardServices                  0x00007fff25ab88f1 __FBSSERIALQUEUE_IS_CALLING_OUT_TO_A_BLOCK__ + 30
	32  FrontBoardServices                  0x00007fff25ab85d7 -[FBSSerialQueue _targetQueue_performNextIfPossible] + 433
	33  FrontBoardServices                  0x00007fff25ab8a9c -[FBSSerialQueue _performNextFromRunLoopSource] + 22
	34  CoreFoundation                      0x00007fff203a8845 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
	35  CoreFoundation                      0x00007fff203a873d __CFRunLoopDoSource0 + 180
	36  CoreFoundation                      0x00007fff203a7c81 __CFRunLoopDoSources0 + 346
	37  CoreFoundation                      0x00007fff203a23f7 __CFRunLoopRun + 878
	38  CoreFoundation                      0x00007fff203a1b9e CFRunLoopRunSpecific + 567
	39  GraphicsServices                    0x00007fff2b793db3 GSEventRunModal + 139
	40  UIKitCore                           0x00007fff2466d40f -[UIApplication _run] + 912
	41  UIKitCore                           0x00007fff24672320 UIApplicationMain + 101
	42  libswiftUIKit.dylib                 0x00007fff53c487b2 $s5UIKit17UIApplicationMainys5Int32VAD_SpySpys4Int8VGGSgSSSgAJtF + 98
	43  delcrash                            0x000000010350100a $sSo21UIApplicationDelegateP5UIKitE4mainyyFZ + 122
	44  delcrash                            0x0000000103500f7e $s8delcrash11AppDelegateC5$mainyyFZ + 46
	45  delcrash                            0x0000000103501059 main + 41
	46  libdyld.dylib                       0x00007fff20257409 start + 1
	47  ???                                 0x0000000000000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
*** Terminating app due to uncaught exception 'RLMException', reason: 'Cannot add an existing managed embedded object to a List.'
terminating with uncaught exception of type NSException
CoreSimulator 732.18 - Device: iPhone 8 (A8CA0A6C-C943-4C70-8EC4-EF9FC5E0F5F5) - Runtime: iOS 14.1 (18A8394) - DeviceType: iPhone 8

Version of Realm and Tooling

Realm framework version: 10.1.2
Xcode version: 12
iOS/OSX version: 14
Dependency manager + version: SPM

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions