๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸŽ iOS

[RealmSwift] Migration Primary Key

by ํ‹ด๋”” 2023. 5. 22.
728x90
๋ฐ˜์‘ํ˜•

Realm์„ ์‚ฌ์šฉํ•ด์„œ ์•ฑ์„ ๋งŒ๋“ค๋‹ค ๋ณด๋ฉด

ํ”„๋กœ์ ํŠธ ์ง„ํ–‰ ์ค‘์— ์ƒˆ๋กœ์šด ํ”„๋กœํผํ‹ฐ ๊ฐ’์„ ์ถ”๊ฐ€, ์‚ญ์ œ, ์—…๋ฐ์ดํŠธ ํ•˜๊ฑฐ๋‚˜

ํ”„๋ผ์ด๋จธ๋ฆฌํ‚ค๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋Š” ์ˆœ๊ฐ„์ด ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. 

 

ํŠนํžˆ ์•ฑ์„ ์ด๋ฏธ ๋ฐฐํฌํ•œ ์ƒํƒœ์—์„œ ๊ผญ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚˜์•ผ ํ•œ๋‹ค๋ฉด ์•„๋ž˜ ๊ธ€์„ ์ฐธ๊ณ ํ•ด์„œ Configuration ์„ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. 

 

[RealmSwift] Migration, ์šด์˜ ์ค‘์ธ ์•ฑ์˜ ํ•„๋“œ ์ถ”๊ฐ€ํ•œ ํ›„ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํ•ด์ฃผ๊ธฐ

class Customer: Object { @objc dynamic var idx = 0 @objc private dynamic var privateType: Int = CustomerType.active.rawValue let products = List() } ์ด๋ฏธ ์šด์˜ ์ค‘์ธ ์•ฑ์—(ํ˜น์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑ ์ค‘) 3๊ฐœ์˜ ํ”„๋กœํผํ‹ฐ๊ฐ€ ์žˆ์Œ. ์ด๋ฏธ realm์„

youbidan-project.tistory.com

 

primaryKey์˜ ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚ฌ๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์ˆ˜์ •ํ•˜๋ฉด ๋œ๋‹ค. 

 

        let configuration = Realm.Configuration(schemaVersion: 4) { migration, oldSchemaVersion in
            migration.enumerateObjects(ofType: Quote.className()) { oldObject, newObject in
                newObject!["ํ˜„์žฌ ํ”„๋ผ์ด๋จธ๋ฆฌ ํ‚ค๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ณ€์ˆ˜ ๋ช…"] = "์ด์ „์— ํ”„๋ผ์ด๋จธ๋ฆฌ ํ‚ค๋กœ ์‚ฌ์šฉํ•œ ๋ณ€์ˆ˜ ๋ช…"
            }
        }
        
        Realm.Configuration.defaultConfiguration = configuration

 

๊ทธ๋Ÿฐ๋ฐ ๋งŒ์•ฝ์— primaryKey๊ฐ€ ์—†์—ˆ๊ณ  ์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€ํ•ด ์ฃผ๋Š” ๊ฒฝ์šฐ

    /// ํ”„๋ผ์ด๋จธ๋ฆฌ ํ‚ค
    @objc dynamic var _id: ObjectId = ObjectId.generate()
    
    override class func primaryKey() -> String? {
        return "_id"
    }

 

์ƒˆ๋กœ์šด primaryKey๊ฐ’์ด ๋  ํ”„๋กœํผํ‹ฐ๋ฅผ Object ํด๋ž˜์Šค์— ์„ ์–ธํ•ด ์คŒ

๊ทธ ํ›„์— primaryKey()๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œ ํ•ด์คŒ

 

        
        let configuration = Realm.Configuration(schemaVersion: 5) { migration, oldSchemaVersion in
            migration.enumerateObjects(ofType: Quote.className()) { oldObject, newObject in
                newObject!["_id"] = ObjectId.generate()
            }
        }
        
        Realm.Configuration.defaultConfiguration = configuration

์ƒˆ๋กœ ์ƒ์„ฑํ•œ ํ”„๋กœํผํ‹ฐ์— PrimaryKey ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•  ๊ฐ’์„ ๋„ฃ์–ด์ค€๋‹ค. 

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ด์ „์— ์‚ฌ์šฉํ•œ id๋ฅผ ๋ฒ„๋ฆฌ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ธ๋ฐ, ์ด์ „ id๋Š” primaryKey๋กœ ์“ฐ์ด์ง€ ์•Š์•„ ์ œ๋Œ€๋กœ ๊ด€๋ฆฌ๋˜๊ณ  ์žˆ์ง€ ์•Š์•„์„œ

์ƒˆ๋กœ์šด ํ”„๋กœํผํ‹ฐ๋ฅผ ์ƒ์„ฑํ•ด ๋งŒ๋“ค์–ด ์ฃผ์—ˆ๋‹ค. 

์ด๋•Œ ์กฐ์‹ฌํ•  ๊ฒƒ์€ ๊ฐ์ฒด ํ•„ํ„ฐ๋ง์‹œ ์ŠคํŠธ๋ง ๊ฐ’์œผ๋กœ ์กฐ๊ฑด๋ฌธ์„ ์ ์–ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๊ด€๋ จ๋œ ๋กœ์ง์—์„œ ํ•ด๋‹น ๊ฐ’์„ ์ฐพ์•„ ์ง์ ‘ ๋ณ€๊ฒฝํ•ด ์ฃผ์–ด์•ผ ํ•œ๋‹ค. 

 

์ฐธ๊ณ  ์‚ฌ์ดํŠธ ๋ฐ ๋„์„œ 

https://stackoverflow.com/questions/32747890/migrate-primary-key-in-realm

 

์ด๋ฏธ์ง€ ์ถœ์ฒ˜ : Realm ํ™ˆํŽ˜์ด์ง€

 

 

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€