Skip to content

Commit 116a97b

Browse files
committed
Added more realistic example
1 parent 4ca4bfa commit 116a97b

File tree

22 files changed

+385
-355
lines changed

22 files changed

+385
-355
lines changed

CoreDataMigration-Example.xcodeproj/project.pbxproj

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,19 @@
77
objects = {
88

99
/* Begin PBXBuildFile section */
10+
3D70ED0721ED328D001C2516 /* Migration2to3ModelMapping.xcmappingmodel in Sources */ = {isa = PBXBuildFile; fileRef = 3D70ED0621ED328D001C2516 /* Migration2to3ModelMapping.xcmappingmodel */; };
1011
3D8E52F521E0EF2800FE1D35 /* FileManager+Helper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D8E52F421E0EF2800FE1D35 /* FileManager+Helper.swift */; };
1112
3D8E52F721E0F98500FE1D35 /* NSManagedObjectContext+Helper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D8E52F621E0F98500FE1D35 /* NSManagedObjectContext+Helper.swift */; };
1213
3DDB26C921EBF87E00388AEE /* PostWriterViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3DDB26C821EBF87E00388AEE /* PostWriterViewController.swift */; };
1314
3DDB26CB21EC00FE00388AEE /* PostViewerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3DDB26CA21EC00FE00388AEE /* PostViewerViewController.swift */; };
1415
431DCEAE1F67EC9E00CF6316 /* CoreDataMigration_Example.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 431DCEAA1F67EC7100CF6316 /* CoreDataMigration_Example.xcdatamodeld */; };
1516
431DCEBF1F67F18100CF6316 /* CoreDataMigrationStep.swift in Sources */ = {isa = PBXBuildFile; fileRef = 431DCEB11F67EE2600CF6316 /* CoreDataMigrationStep.swift */; };
1617
431DCEC01F67F18100CF6316 /* CoreDataMigrator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 431DCEB21F67EE2600CF6316 /* CoreDataMigrator.swift */; };
17-
431DCEC21F67F1B100CF6316 /* Migration1to2.xcmappingmodel in Sources */ = {isa = PBXBuildFile; fileRef = 431DCEC11F67F1B100CF6316 /* Migration1to2.xcmappingmodel */; };
1818
431DCEC51F67F80B00CF6316 /* AppLoading.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 431DCEC41F67F80B00CF6316 /* AppLoading.storyboard */; };
1919
431DCECB1F67F93000CF6316 /* AppLoadingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 431DCECA1F67F93000CF6316 /* AppLoadingViewController.swift */; };
2020
431DCECC1F67FE0500CF6316 /* PostsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 431DCEC91F67F91C00CF6316 /* PostsViewController.swift */; };
2121
431DCECD1F67FE0800CF6316 /* PostTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 431DCEC81F67F91C00CF6316 /* PostTableViewCell.swift */; };
2222
431DCED21F6815A300CF6316 /* Post2ToPost3MigrationPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 431DCED11F6815A300CF6316 /* Post2ToPost3MigrationPolicy.swift */; };
23-
431DCED61F68315900CF6316 /* Migration2to3.xcmappingmodel in Sources */ = {isa = PBXBuildFile; fileRef = 431DCED51F68315400CF6316 /* Migration2to3.xcmappingmodel */; };
2423
432EA5591F6C552800EFE008 /* NSPersistentStoreCoordinator+SQLite.swift in Sources */ = {isa = PBXBuildFile; fileRef = 432EA5581F6C552800EFE008 /* NSPersistentStoreCoordinator+SQLite.swift */; };
2524
43370DB01F66E7A6006188EC /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43370D751F66E74A006188EC /* AppDelegate.swift */; };
2625
43370DB31F66E830006188EC /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 43370D781F66E74A006188EC /* LaunchScreen.storyboard */; };
@@ -33,9 +32,7 @@
3332
C28553E221DD14090004C7BA /* NSManagedObjectModel+Compatible.swift in Sources */ = {isa = PBXBuildFile; fileRef = C28553E121DD14090004C7BA /* NSManagedObjectModel+Compatible.swift */; };
3433
C28553E421DD1D7B0004C7BA /* NSManagedObjectModel+Resource.swift in Sources */ = {isa = PBXBuildFile; fileRef = C28553E321DD1D7B0004C7BA /* NSManagedObjectModel+Resource.swift */; };
3534
C28553F821DD21C40004C7BA /* CoreDataManagerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C28553EE21DD21C30004C7BA /* CoreDataManagerTests.swift */; };
36-
C28553FA21DD21C40004C7BA /* CoreDataMigration_Example_WAL.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = C28553F221DD21C30004C7BA /* CoreDataMigration_Example_WAL.sqlite */; };
3735
C28553FB21DD21C40004C7BA /* CoreDataMigration_Example_2.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = C28553F321DD21C30004C7BA /* CoreDataMigration_Example_2.sqlite */; };
38-
C28553FC21DD21C40004C7BA /* CoreDataMigration_Example_WAL.sqlite-wal in Resources */ = {isa = PBXBuildFile; fileRef = C28553F421DD21C30004C7BA /* CoreDataMigration_Example_WAL.sqlite-wal */; };
3936
C28553FD21DD21C40004C7BA /* CoreDataMigration_Example_1.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = C28553F521DD21C30004C7BA /* CoreDataMigration_Example_1.sqlite */; };
4037
C28553FE21DD21C40004C7BA /* CoreDataMigration_Example_3.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = C28553F621DD21C30004C7BA /* CoreDataMigration_Example_3.sqlite */; };
4138
C28553FF21DD21C40004C7BA /* CoreDataMigratorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C28553F721DD21C30004C7BA /* CoreDataMigratorTests.swift */; };
@@ -53,6 +50,7 @@
5350
/* End PBXContainerItemProxy section */
5451

5552
/* Begin PBXFileReference section */
53+
3D70ED0621ED328D001C2516 /* Migration2to3ModelMapping.xcmappingmodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcmappingmodel; path = Migration2to3ModelMapping.xcmappingmodel; sourceTree = "<group>"; };
5654
3D8E52F421E0EF2800FE1D35 /* FileManager+Helper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "FileManager+Helper.swift"; sourceTree = "<group>"; };
5755
3D8E52F621E0F98500FE1D35 /* NSManagedObjectContext+Helper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSManagedObjectContext+Helper.swift"; sourceTree = "<group>"; };
5856
3DDB26C821EBF87E00388AEE /* PostWriterViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostWriterViewController.swift; sourceTree = "<group>"; };
@@ -62,13 +60,11 @@
6260
431DCEAD1F67EC7100CF6316 /* CoreDataMigration_Example.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = CoreDataMigration_Example.xcdatamodel; sourceTree = "<group>"; };
6361
431DCEB11F67EE2600CF6316 /* CoreDataMigrationStep.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoreDataMigrationStep.swift; sourceTree = "<group>"; };
6462
431DCEB21F67EE2600CF6316 /* CoreDataMigrator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoreDataMigrator.swift; sourceTree = "<group>"; };
65-
431DCEC11F67F1B100CF6316 /* Migration1to2.xcmappingmodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcmappingmodel; path = Migration1to2.xcmappingmodel; sourceTree = "<group>"; };
6663
431DCEC41F67F80B00CF6316 /* AppLoading.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = AppLoading.storyboard; sourceTree = "<group>"; };
6764
431DCEC81F67F91C00CF6316 /* PostTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostTableViewCell.swift; sourceTree = "<group>"; };
6865
431DCEC91F67F91C00CF6316 /* PostsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostsViewController.swift; sourceTree = "<group>"; };
6966
431DCECA1F67F93000CF6316 /* AppLoadingViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppLoadingViewController.swift; sourceTree = "<group>"; };
7067
431DCED11F6815A300CF6316 /* Post2ToPost3MigrationPolicy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Post2ToPost3MigrationPolicy.swift; sourceTree = "<group>"; };
71-
431DCED51F68315400CF6316 /* Migration2to3.xcmappingmodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcmappingmodel; path = Migration2to3.xcmappingmodel; sourceTree = "<group>"; };
7268
431DCED71F68394200CF6316 /* CoreDataMigration_Example 4.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "CoreDataMigration_Example 4.xcdatamodel"; sourceTree = "<group>"; };
7369
432EA5581F6C552800EFE008 /* NSPersistentStoreCoordinator+SQLite.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSPersistentStoreCoordinator+SQLite.swift"; sourceTree = "<group>"; };
7470
43370D731F66E74A006188EC /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
@@ -87,9 +83,7 @@
8783
C28553E321DD1D7B0004C7BA /* NSManagedObjectModel+Resource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSManagedObjectModel+Resource.swift"; sourceTree = "<group>"; };
8884
C28553E821DD21950004C7BA /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
8985
C28553EE21DD21C30004C7BA /* CoreDataManagerTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CoreDataManagerTests.swift; sourceTree = "<group>"; };
90-
C28553F221DD21C30004C7BA /* CoreDataMigration_Example_WAL.sqlite */ = {isa = PBXFileReference; lastKnownFileType = file; path = CoreDataMigration_Example_WAL.sqlite; sourceTree = "<group>"; };
9186
C28553F321DD21C30004C7BA /* CoreDataMigration_Example_2.sqlite */ = {isa = PBXFileReference; lastKnownFileType = file; path = CoreDataMigration_Example_2.sqlite; sourceTree = "<group>"; };
92-
C28553F421DD21C30004C7BA /* CoreDataMigration_Example_WAL.sqlite-wal */ = {isa = PBXFileReference; lastKnownFileType = file; path = "CoreDataMigration_Example_WAL.sqlite-wal"; sourceTree = "<group>"; };
9387
C28553F521DD21C30004C7BA /* CoreDataMigration_Example_1.sqlite */ = {isa = PBXFileReference; lastKnownFileType = file; path = CoreDataMigration_Example_1.sqlite; sourceTree = "<group>"; };
9488
C28553F621DD21C30004C7BA /* CoreDataMigration_Example_3.sqlite */ = {isa = PBXFileReference; lastKnownFileType = file; path = CoreDataMigration_Example_3.sqlite; sourceTree = "<group>"; };
9589
C28553F721DD21C30004C7BA /* CoreDataMigratorTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CoreDataMigratorTests.swift; sourceTree = "<group>"; };
@@ -154,8 +148,7 @@
154148
431DCEB31F67EE2600CF6316 /* Mappings */ = {
155149
isa = PBXGroup;
156150
children = (
157-
431DCEC11F67F1B100CF6316 /* Migration1to2.xcmappingmodel */,
158-
431DCED51F68315400CF6316 /* Migration2to3.xcmappingmodel */,
151+
3D70ED0621ED328D001C2516 /* Migration2to3ModelMapping.xcmappingmodel */,
159152
);
160153
path = Mappings;
161154
sourceTree = "<group>";
@@ -373,10 +366,8 @@
373366
C28553F121DD21C30004C7BA /* Models */ = {
374367
isa = PBXGroup;
375368
children = (
376-
C28553F221DD21C30004C7BA /* CoreDataMigration_Example_WAL.sqlite */,
377-
C28553F321DD21C30004C7BA /* CoreDataMigration_Example_2.sqlite */,
378-
C28553F421DD21C30004C7BA /* CoreDataMigration_Example_WAL.sqlite-wal */,
379369
C28553F521DD21C30004C7BA /* CoreDataMigration_Example_1.sqlite */,
370+
C28553F321DD21C30004C7BA /* CoreDataMigration_Example_2.sqlite */,
380371
C28553F621DD21C30004C7BA /* CoreDataMigration_Example_3.sqlite */,
381372
);
382373
path = Models;
@@ -486,10 +477,8 @@
486477
buildActionMask = 2147483647;
487478
files = (
488479
C28553FE21DD21C40004C7BA /* CoreDataMigration_Example_3.sqlite in Resources */,
489-
C28553FC21DD21C40004C7BA /* CoreDataMigration_Example_WAL.sqlite-wal in Resources */,
490480
C28553FB21DD21C40004C7BA /* CoreDataMigration_Example_2.sqlite in Resources */,
491481
C28553FD21DD21C40004C7BA /* CoreDataMigration_Example_1.sqlite in Resources */,
492-
C28553FA21DD21C40004C7BA /* CoreDataMigration_Example_WAL.sqlite in Resources */,
493482
);
494483
runOnlyForDeploymentPostprocessing = 0;
495484
};
@@ -502,11 +491,11 @@
502491
files = (
503492
43370DB01F66E7A6006188EC /* AppDelegate.swift in Sources */,
504493
431DCEC01F67F18100CF6316 /* CoreDataMigrator.swift in Sources */,
494+
3D70ED0721ED328D001C2516 /* Migration2to3ModelMapping.xcmappingmodel in Sources */,
505495
C28553E421DD1D7B0004C7BA /* NSManagedObjectModel+Resource.swift in Sources */,
506496
431DCECB1F67F93000CF6316 /* AppLoadingViewController.swift in Sources */,
507497
3DDB26CB21EC00FE00388AEE /* PostViewerViewController.swift in Sources */,
508498
C28553E221DD14090004C7BA /* NSManagedObjectModel+Compatible.swift in Sources */,
509-
431DCED61F68315900CF6316 /* Migration2to3.xcmappingmodel in Sources */,
510499
4345D4F51F67E1FC00027D11 /* CGFloat+Random.swift in Sources */,
511500
C28553DF21DCF5000004C7BA /* CoreDataMigrationVersion.swift in Sources */,
512501
432EA5591F6C552800EFE008 /* NSPersistentStoreCoordinator+SQLite.swift in Sources */,
@@ -518,7 +507,6 @@
518507
43370DBE1F66F0DF006188EC /* CoreDataManager.swift in Sources */,
519508
431DCEBF1F67F18100CF6316 /* CoreDataMigrationStep.swift in Sources */,
520509
431DCEAE1F67EC9E00CF6316 /* CoreDataMigration_Example.xcdatamodeld in Sources */,
521-
431DCEC21F67F1B100CF6316 /* Migration1to2.xcmappingmodel in Sources */,
522510
3DDB26C921EBF87E00388AEE /* PostWriterViewController.swift in Sources */,
523511
);
524512
runOnlyForDeploymentPostprocessing = 0;
@@ -784,7 +772,7 @@
784772
431DCEAC1F67EC7100CF6316 /* CoreDataMigration_Example 3.xcdatamodel */,
785773
431DCEAD1F67EC7100CF6316 /* CoreDataMigration_Example.xcdatamodel */,
786774
);
787-
currentVersion = 431DCEAD1F67EC7100CF6316 /* CoreDataMigration_Example.xcdatamodel */;
775+
currentVersion = 431DCED71F68394200CF6316 /* CoreDataMigration_Example 4.xcdatamodel */;
788776
path = CoreDataMigration_Example.xcdatamodeld;
789777
sourceTree = "<group>";
790778
versionGroupType = wrapper.xcdatamodel;

CoreDataMigration-Example/CoreData/Migration/CoreDataMigrationVersion.swift

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ import CoreData
1111

1212
enum CoreDataMigrationVersion: String, CaseIterable {
1313
case version1 = "CoreDataMigration_Example"
14-
// case version2 = "CoreDataMigration_Example 2"
15-
// case version3 = "CoreDataMigration_Example 3"
16-
// case version4 = "CoreDataMigration_Example 4"
14+
case version2 = "CoreDataMigration_Example 2"
15+
case version3 = "CoreDataMigration_Example 3"
16+
case version4 = "CoreDataMigration_Example 4"
1717

1818
// MARK: - Latest
1919

@@ -30,12 +30,12 @@ enum CoreDataMigrationVersion: String, CaseIterable {
3030
func nextVersion() -> CoreDataMigrationVersion? {
3131
switch self {
3232
case .version1:
33-
// return .version2
34-
// case .version2:
35-
// return .version3
36-
// case .version3:
37-
// return .version4
38-
// case .version4:
33+
return .version2
34+
case .version2:
35+
return .version3
36+
case .version3:
37+
return .version4
38+
case .version4:
3939
return nil
4040
}
4141
}

CoreDataMigration-Example/CoreData/Migration/Mappings/Migration1to2.xcmappingmodel/xcmapping.xml

Lines changed: 0 additions & 83 deletions
This file was deleted.

CoreDataMigration-Example/CoreData/Migration/Mappings/Migration2to3.xcmappingmodel/xcmapping.xml

Lines changed: 0 additions & 104 deletions
This file was deleted.

CoreDataMigration-Example/CoreData/Migration/Mappings/Migration2to3ModelMapping.xcmappingmodel/xcmapping.xml

Lines changed: 109 additions & 0 deletions
Large diffs are not rendered by default.

CoreDataMigration-Example/CoreData/Migration/Policies/Post2ToPost3MigrationPolicy.swift

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,20 @@ final class Post2ToPost3MigrationPolicy: NSEntityMigrationPolicy {
1717
fatalError("was expected a post")
1818
}
1919

20-
let color = NSEntityDescription.insertNewObject(forEntityName: "Color", into: destinationPost.managedObjectContext!)
21-
color.setValue(UUID().uuidString, forKey: "colorID")
22-
color.setValue(sInstance.value(forKey: "hexColor"), forKey: "hex")
20+
let sourceBody = sInstance.value(forKey: "content") as? String
21+
let sourceTitle = sourceBody?.prefix(80)
22+
let sourceHexColor = sInstance.value(forKey: "hexColor")
2323

24-
destinationPost.setValue(color, forKey: "color")
24+
let titleContent = NSEntityDescription.insertNewObject(forEntityName: "Content", into: destinationPost.managedObjectContext!)
25+
titleContent.setValue(sourceTitle, forKey: "content")
26+
titleContent.setValue(sourceHexColor, forKey: "hexColor")
27+
titleContent.setValue(destinationPost, forKey: "post")
28+
destinationPost.setValue(titleContent, forKey: "title")
29+
30+
let bodyContent = NSEntityDescription.insertNewObject(forEntityName: "Content", into: destinationPost.managedObjectContext!)
31+
bodyContent.setValue(sourceBody, forKey: "content")
32+
bodyContent.setValue(sourceHexColor, forKey: "hexColor")
33+
bodyContent.setValue(destinationPost, forKey: "post")
34+
destinationPost.setValue(bodyContent, forKey: "body")
2535
}
2636
}

CoreDataMigration-Example/CoreData/Model/CoreDataMigration_Example.xcdatamodeld/.xccurrentversion

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@
33
<plist version="1.0">
44
<dict>
55
<key>_XCCurrentVersionName</key>
6-
<string>CoreDataMigration_Example.xcdatamodel</string>
6+
<string>CoreDataMigration_Example 4.xcdatamodel</string>
77
</dict>
88
</plist>
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
22
<model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="14460.32" systemVersion="18C54" minimumToolsVersion="Automatic" sourceLanguage="Swift" userDefinedModelVersionIdentifier="">
33
<entity name="Post" representedClassName="Post" syncable="YES" codeGenerationType="class">
4+
<attribute name="content" optional="YES" attributeType="String" syncable="YES"/>
45
<attribute name="date" optional="YES" attributeType="Date" usesScalarValueType="NO" syncable="YES"/>
56
<attribute name="hexColor" optional="YES" attributeType="String" elementID="color" syncable="YES"/>
67
<attribute name="postID" optional="YES" attributeType="String" syncable="YES"/>
78
</entity>
89
<elements>
9-
<element name="Post" positionX="-63" positionY="-18" width="128" height="90"/>
10+
<element name="Post" positionX="-63" positionY="-18" width="128" height="105"/>
1011
</elements>
1112
</model>
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,18 @@
11
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
2-
<model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="13233.4" systemVersion="16G29" minimumToolsVersion="Automatic" sourceLanguage="Swift" userDefinedModelVersionIdentifier="">
3-
<entity name="Color" representedClassName="Color" syncable="YES" codeGenerationType="class">
4-
<attribute name="colorID" optional="YES" attributeType="String" syncable="YES"/>
5-
<attribute name="hex" optional="YES" attributeType="String" syncable="YES"/>
6-
<relationship name="post" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="Post" inverseName="color" inverseEntity="Post" syncable="YES"/>
2+
<model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="14460.32" systemVersion="18C54" minimumToolsVersion="Automatic" sourceLanguage="Swift" userDefinedModelVersionIdentifier="">
3+
<entity name="Content" representedClassName="Content" syncable="YES" codeGenerationType="class">
4+
<attribute name="content" optional="YES" attributeType="String" syncable="YES"/>
5+
<attribute name="hexColor" optional="YES" attributeType="String" syncable="YES"/>
6+
<relationship name="post" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="Post" syncable="YES"/>
77
</entity>
88
<entity name="Post" representedClassName="Post" syncable="YES" codeGenerationType="class">
99
<attribute name="date" optional="YES" attributeType="Date" usesScalarValueType="NO" syncable="YES"/>
1010
<attribute name="postID" optional="YES" attributeType="String" syncable="YES"/>
11-
<relationship name="color" maxCount="1" deletionRule="Nullify" destinationEntity="Color" inverseName="post" inverseEntity="Color" syncable="YES"/>
11+
<relationship name="body" maxCount="1" deletionRule="Nullify" destinationEntity="Content" syncable="YES"/>
12+
<relationship name="title" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="Content" syncable="YES"/>
1213
</entity>
1314
<elements>
14-
<element name="Post" positionX="-63" positionY="-18" width="128" height="90"/>
15-
<element name="Color" positionX="-63" positionY="9" width="128" height="90"/>
15+
<element name="Content" positionX="-63" positionY="9" width="128" height="90"/>
16+
<element name="Post" positionX="-63" positionY="-18" width="128" height="105"/>
1617
</elements>
1718
</model>

0 commit comments

Comments
 (0)