mirror of
https://github.com/JohnEstropia/CoreStore.git
synced 2026-03-20 08:34:23 +01:00
LiveList refetch
This commit is contained in:
@@ -3123,6 +3123,7 @@
|
|||||||
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
||||||
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
|
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
|
||||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
||||||
|
MARKETING_VERSION = 7.0.0;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
@@ -3141,6 +3142,7 @@
|
|||||||
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
||||||
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
|
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
|
||||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
||||||
|
MARKETING_VERSION = 7.0.0;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-O";
|
SWIFT_OPTIMIZATION_LEVEL = "-O";
|
||||||
|
|||||||
@@ -26,6 +26,8 @@
|
|||||||
B54AAD5B1AF4D26E00848AE0 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B54AAD5A1AF4D26E00848AE0 /* Images.xcassets */; };
|
B54AAD5B1AF4D26E00848AE0 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B54AAD5A1AF4D26E00848AE0 /* Images.xcassets */; };
|
||||||
B54AAD5E1AF4D26E00848AE0 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = B54AAD5C1AF4D26E00848AE0 /* LaunchScreen.xib */; };
|
B54AAD5E1AF4D26E00848AE0 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = B54AAD5C1AF4D26E00848AE0 /* LaunchScreen.xib */; };
|
||||||
B560070F1B3EC90F00A9A8F9 /* OrganismV2ToV3MigrationPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = B560070E1B3EC90F00A9A8F9 /* OrganismV2ToV3MigrationPolicy.swift */; };
|
B560070F1B3EC90F00A9A8F9 /* OrganismV2ToV3MigrationPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = B560070E1B3EC90F00A9A8F9 /* OrganismV2ToV3MigrationPolicy.swift */; };
|
||||||
|
B5635D192357F9F700B80E6B /* CollectionViewDemoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5635D182357F9F700B80E6B /* CollectionViewDemoViewController.swift */; };
|
||||||
|
B5635D1B2357FA4B00B80E6B /* PaletteCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5635D1A2357FA4B00B80E6B /* PaletteCollectionViewCell.swift */; };
|
||||||
B566E32A1B117B1F00F4F0C6 /* StackSetupDemoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B566E3291B117B1F00F4F0C6 /* StackSetupDemoViewController.swift */; };
|
B566E32A1B117B1F00F4F0C6 /* StackSetupDemoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B566E3291B117B1F00F4F0C6 /* StackSetupDemoViewController.swift */; };
|
||||||
B566E3321B11DF3200F4F0C6 /* UserAccount.swift in Sources */ = {isa = PBXBuildFile; fileRef = B566E3311B11DF3200F4F0C6 /* UserAccount.swift */; };
|
B566E3321B11DF3200F4F0C6 /* UserAccount.swift in Sources */ = {isa = PBXBuildFile; fileRef = B566E3311B11DF3200F4F0C6 /* UserAccount.swift */; };
|
||||||
B56964C91B20AC780075EE4A /* CustomLoggerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B56964C81B20AC780075EE4A /* CustomLoggerViewController.swift */; };
|
B56964C91B20AC780075EE4A /* CustomLoggerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B56964C81B20AC780075EE4A /* CustomLoggerViewController.swift */; };
|
||||||
@@ -38,6 +40,7 @@
|
|||||||
B569651C1B30889A0075EE4A /* QueryingResultsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B569651B1B30889A0075EE4A /* QueryingResultsViewController.swift */; };
|
B569651C1B30889A0075EE4A /* QueryingResultsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B569651B1B30889A0075EE4A /* QueryingResultsViewController.swift */; };
|
||||||
B56965291B3582D30075EE4A /* MigrationDemo.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = B56965271B3582D30075EE4A /* MigrationDemo.xcdatamodeld */; };
|
B56965291B3582D30075EE4A /* MigrationDemo.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = B56965271B3582D30075EE4A /* MigrationDemo.xcdatamodeld */; };
|
||||||
B5AA37EF2357D30300FFD4B9 /* ColorsDemo.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5AA37EE2357D30300FFD4B9 /* ColorsDemo.swift */; };
|
B5AA37EF2357D30300FFD4B9 /* ColorsDemo.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5AA37EE2357D30300FFD4B9 /* ColorsDemo.swift */; };
|
||||||
|
B5C37EE52357FEBE0035A20D /* PaletteCollectionSectionHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5C37EE42357FEBE0035A20D /* PaletteCollectionSectionHeaderView.swift */; };
|
||||||
B5E599321B5240F50084BD5F /* OrganismTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E599311B5240F50084BD5F /* OrganismTableViewCell.swift */; };
|
B5E599321B5240F50084BD5F /* OrganismTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E599311B5240F50084BD5F /* OrganismTableViewCell.swift */; };
|
||||||
B5E89AD01C5292A2003B04A9 /* CoreStore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B5BDC9211C202429008147CD /* CoreStore.framework */; };
|
B5E89AD01C5292A2003B04A9 /* CoreStore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B5BDC9211C202429008147CD /* CoreStore.framework */; };
|
||||||
B5E89AD11C5292A2003B04A9 /* CoreStore.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = B5BDC9211C202429008147CD /* CoreStore.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
B5E89AD11C5292A2003B04A9 /* CoreStore.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = B5BDC9211C202429008147CD /* CoreStore.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
||||||
@@ -85,6 +88,8 @@
|
|||||||
B54AAD5A1AF4D26E00848AE0 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
|
B54AAD5A1AF4D26E00848AE0 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
|
||||||
B54AAD5D1AF4D26E00848AE0 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = "<group>"; };
|
B54AAD5D1AF4D26E00848AE0 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = "<group>"; };
|
||||||
B560070E1B3EC90F00A9A8F9 /* OrganismV2ToV3MigrationPolicy.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OrganismV2ToV3MigrationPolicy.swift; sourceTree = "<group>"; };
|
B560070E1B3EC90F00A9A8F9 /* OrganismV2ToV3MigrationPolicy.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OrganismV2ToV3MigrationPolicy.swift; sourceTree = "<group>"; };
|
||||||
|
B5635D182357F9F700B80E6B /* CollectionViewDemoViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CollectionViewDemoViewController.swift; sourceTree = "<group>"; };
|
||||||
|
B5635D1A2357FA4B00B80E6B /* PaletteCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaletteCollectionViewCell.swift; sourceTree = "<group>"; };
|
||||||
B566E3291B117B1F00F4F0C6 /* StackSetupDemoViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StackSetupDemoViewController.swift; sourceTree = "<group>"; };
|
B566E3291B117B1F00F4F0C6 /* StackSetupDemoViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StackSetupDemoViewController.swift; sourceTree = "<group>"; };
|
||||||
B566E3311B11DF3200F4F0C6 /* UserAccount.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserAccount.swift; sourceTree = "<group>"; };
|
B566E3311B11DF3200F4F0C6 /* UserAccount.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserAccount.swift; sourceTree = "<group>"; };
|
||||||
B56964C81B20AC780075EE4A /* CustomLoggerViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CustomLoggerViewController.swift; sourceTree = "<group>"; };
|
B56964C81B20AC780075EE4A /* CustomLoggerViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CustomLoggerViewController.swift; sourceTree = "<group>"; };
|
||||||
@@ -98,6 +103,7 @@
|
|||||||
B56965281B3582D30075EE4A /* MigrationDemo.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = MigrationDemo.xcdatamodel; sourceTree = "<group>"; };
|
B56965281B3582D30075EE4A /* MigrationDemo.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = MigrationDemo.xcdatamodel; sourceTree = "<group>"; };
|
||||||
B5AA37EE2357D30300FFD4B9 /* ColorsDemo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ColorsDemo.swift; sourceTree = "<group>"; };
|
B5AA37EE2357D30300FFD4B9 /* ColorsDemo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ColorsDemo.swift; sourceTree = "<group>"; };
|
||||||
B5BDC9211C202429008147CD /* CoreStore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = CoreStore.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
B5BDC9211C202429008147CD /* CoreStore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = CoreStore.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
|
B5C37EE42357FEBE0035A20D /* PaletteCollectionSectionHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaletteCollectionSectionHeaderView.swift; sourceTree = "<group>"; };
|
||||||
B5E599311B5240F50084BD5F /* OrganismTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = OrganismTableViewCell.swift; path = "CoreStoreDemo/MIgrations Demo/OrganismTableViewCell.swift"; sourceTree = SOURCE_ROOT; };
|
B5E599311B5240F50084BD5F /* OrganismTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = OrganismTableViewCell.swift; path = "CoreStoreDemo/MIgrations Demo/OrganismTableViewCell.swift"; sourceTree = SOURCE_ROOT; };
|
||||||
B5EE25801B36E1B00000406B /* MigrationDemoV2.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = MigrationDemoV2.xcdatamodel; sourceTree = "<group>"; };
|
B5EE25801B36E1B00000406B /* MigrationDemoV2.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = MigrationDemoV2.xcdatamodel; sourceTree = "<group>"; };
|
||||||
B5EE25841B36E23C0000406B /* OrganismV1.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OrganismV1.swift; sourceTree = "<group>"; };
|
B5EE25841B36E23C0000406B /* OrganismV1.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OrganismV1.swift; sourceTree = "<group>"; };
|
||||||
@@ -138,9 +144,12 @@
|
|||||||
B5AA37EE2357D30300FFD4B9 /* ColorsDemo.swift */,
|
B5AA37EE2357D30300FFD4B9 /* ColorsDemo.swift */,
|
||||||
B52977D81B120B80003D50A5 /* ObserversViewController.swift */,
|
B52977D81B120B80003D50A5 /* ObserversViewController.swift */,
|
||||||
B503FADB1AFDC71700F90881 /* ListObserverDemoViewController.swift */,
|
B503FADB1AFDC71700F90881 /* ListObserverDemoViewController.swift */,
|
||||||
|
B5635D182357F9F700B80E6B /* CollectionViewDemoViewController.swift */,
|
||||||
B503FADC1AFDC71700F90881 /* ObjectObserverDemoViewController.swift */,
|
B503FADC1AFDC71700F90881 /* ObjectObserverDemoViewController.swift */,
|
||||||
B503FADD1AFDC71700F90881 /* Palette.swift */,
|
B503FADD1AFDC71700F90881 /* Palette.swift */,
|
||||||
B503FADE1AFDC71700F90881 /* PaletteTableViewCell.swift */,
|
B503FADE1AFDC71700F90881 /* PaletteTableViewCell.swift */,
|
||||||
|
B5635D1A2357FA4B00B80E6B /* PaletteCollectionViewCell.swift */,
|
||||||
|
B5C37EE42357FEBE0035A20D /* PaletteCollectionSectionHeaderView.swift */,
|
||||||
);
|
);
|
||||||
path = "List and Object Observers Demo";
|
path = "List and Object Observers Demo";
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -333,6 +342,7 @@
|
|||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
B56965181B2E20CC0075EE4A /* TimeZone.swift in Sources */,
|
B56965181B2E20CC0075EE4A /* TimeZone.swift in Sources */,
|
||||||
|
B5C37EE52357FEBE0035A20D /* PaletteCollectionSectionHeaderView.swift in Sources */,
|
||||||
B56965291B3582D30075EE4A /* MigrationDemo.xcdatamodeld in Sources */,
|
B56965291B3582D30075EE4A /* MigrationDemo.xcdatamodeld in Sources */,
|
||||||
B5E599321B5240F50084BD5F /* OrganismTableViewCell.swift in Sources */,
|
B5E599321B5240F50084BD5F /* OrganismTableViewCell.swift in Sources */,
|
||||||
B5EE25851B36E23C0000406B /* OrganismV1.swift in Sources */,
|
B5EE25851B36E23C0000406B /* OrganismV1.swift in Sources */,
|
||||||
@@ -344,6 +354,7 @@
|
|||||||
B503FAE01AFDC71700F90881 /* ObjectObserverDemoViewController.swift in Sources */,
|
B503FAE01AFDC71700F90881 /* ObjectObserverDemoViewController.swift in Sources */,
|
||||||
B52977D91B120B80003D50A5 /* ObserversViewController.swift in Sources */,
|
B52977D91B120B80003D50A5 /* ObserversViewController.swift in Sources */,
|
||||||
B56964C91B20AC780075EE4A /* CustomLoggerViewController.swift in Sources */,
|
B56964C91B20AC780075EE4A /* CustomLoggerViewController.swift in Sources */,
|
||||||
|
B5635D192357F9F700B80E6B /* CollectionViewDemoViewController.swift in Sources */,
|
||||||
B566E32A1B117B1F00F4F0C6 /* StackSetupDemoViewController.swift in Sources */,
|
B566E32A1B117B1F00F4F0C6 /* StackSetupDemoViewController.swift in Sources */,
|
||||||
B56964DA1B231BCA0075EE4A /* MaleAccount.swift in Sources */,
|
B56964DA1B231BCA0075EE4A /* MaleAccount.swift in Sources */,
|
||||||
B566E3321B11DF3200F4F0C6 /* UserAccount.swift in Sources */,
|
B566E3321B11DF3200F4F0C6 /* UserAccount.swift in Sources */,
|
||||||
@@ -355,6 +366,7 @@
|
|||||||
B503FADF1AFDC71700F90881 /* ListObserverDemoViewController.swift in Sources */,
|
B503FADF1AFDC71700F90881 /* ListObserverDemoViewController.swift in Sources */,
|
||||||
B54AAD4F1AF4D26E00848AE0 /* AppDelegate.swift in Sources */,
|
B54AAD4F1AF4D26E00848AE0 /* AppDelegate.swift in Sources */,
|
||||||
B50132282344E5E900FC238B /* SwiftUIContainerViewController.swift in Sources */,
|
B50132282344E5E900FC238B /* SwiftUIContainerViewController.swift in Sources */,
|
||||||
|
B5635D1B2357FA4B00B80E6B /* PaletteCollectionViewCell.swift in Sources */,
|
||||||
B56964D71B231AE90075EE4A /* StackSetupDemo.xcdatamodeld in Sources */,
|
B56964D71B231AE90075EE4A /* StackSetupDemo.xcdatamodeld in Sources */,
|
||||||
B56964DC1B231BCB0075EE4A /* FemaleAccount.swift in Sources */,
|
B56964DC1B231BCB0075EE4A /* FemaleAccount.swift in Sources */,
|
||||||
B5AA37EF2357D30300FFD4B9 /* ColorsDemo.swift in Sources */,
|
B5AA37EF2357D30300FFD4B9 /* ColorsDemo.swift in Sources */,
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment identifier="iOS"/>
|
<deployment identifier="iOS"/>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="15404"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="15404"/>
|
||||||
|
<capability name="collection view cell content view" minToolsVersion="11.0"/>
|
||||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<customFonts key="customFonts">
|
<customFonts key="customFonts">
|
||||||
@@ -623,7 +624,7 @@
|
|||||||
</viewController>
|
</viewController>
|
||||||
<placeholder placeholderIdentifier="IBFirstResponder" id="49t-Sy-Rq7" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
<placeholder placeholderIdentifier="IBFirstResponder" id="49t-Sy-Rq7" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
</objects>
|
</objects>
|
||||||
<point key="canvasLocation" x="5864" y="1324.5"/>
|
<point key="canvasLocation" x="6316" y="1267"/>
|
||||||
</scene>
|
</scene>
|
||||||
<!--Colors-->
|
<!--Colors-->
|
||||||
<scene sceneID="3lD-lX-hIc">
|
<scene sceneID="3lD-lX-hIc">
|
||||||
@@ -649,7 +650,7 @@
|
|||||||
<containerView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="6So-f3-4Gp">
|
<containerView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="6So-f3-4Gp">
|
||||||
<rect key="frame" x="0.0" y="311.5" width="375" height="311.5"/>
|
<rect key="frame" x="0.0" y="311.5" width="375" height="311.5"/>
|
||||||
<connections>
|
<connections>
|
||||||
<segue destination="bLr-DM-i2t" kind="embed" id="OdS-gZ-CUA"/>
|
<segue destination="Rdw-NU-NaK" kind="embed" id="3Ob-Bj-yvz"/>
|
||||||
</connections>
|
</connections>
|
||||||
</containerView>
|
</containerView>
|
||||||
</subviews>
|
</subviews>
|
||||||
@@ -713,7 +714,7 @@
|
|||||||
</objects>
|
</objects>
|
||||||
<point key="canvasLocation" x="1822" y="2013"/>
|
<point key="canvasLocation" x="1822" y="2013"/>
|
||||||
</scene>
|
</scene>
|
||||||
<!--List Observer-->
|
<!--LiveList-->
|
||||||
<scene sceneID="gkX-bd-Rel">
|
<scene sceneID="gkX-bd-Rel">
|
||||||
<objects>
|
<objects>
|
||||||
<tableViewController id="3AE-ED-0oj" customClass="ListObserverDemoViewController" customModule="CoreStoreDemo" customModuleProvider="target" sceneMemberID="viewController">
|
<tableViewController id="3AE-ED-0oj" customClass="ListObserverDemoViewController" customModule="CoreStoreDemo" customModuleProvider="target" sceneMemberID="viewController">
|
||||||
@@ -764,14 +765,14 @@
|
|||||||
</connections>
|
</connections>
|
||||||
</tableView>
|
</tableView>
|
||||||
<extendedEdge key="edgesForExtendedLayout" top="YES"/>
|
<extendedEdge key="edgesForExtendedLayout" top="YES"/>
|
||||||
<navigationItem key="navigationItem" title="List Observer" id="JjF-x3-ixG"/>
|
<navigationItem key="navigationItem" title="LiveList" id="5kj-jr-HoL"/>
|
||||||
<connections>
|
<connections>
|
||||||
<segue destination="dX3-kR-CYC" kind="show" identifier="ObjectObserverDemoViewController" id="hyN-De-zte"/>
|
<segue destination="dX3-kR-CYC" kind="show" identifier="ObjectObserverDemoViewController" id="hyN-De-zte"/>
|
||||||
</connections>
|
</connections>
|
||||||
</tableViewController>
|
</tableViewController>
|
||||||
<placeholder placeholderIdentifier="IBFirstResponder" id="P5L-49-pOr" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
<placeholder placeholderIdentifier="IBFirstResponder" id="P5L-49-pOr" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
</objects>
|
</objects>
|
||||||
<point key="canvasLocation" x="5085" y="1144.5"/>
|
<point key="canvasLocation" x="5156" y="1144"/>
|
||||||
</scene>
|
</scene>
|
||||||
<!--Placemarks-->
|
<!--Placemarks-->
|
||||||
<scene sceneID="LRD-q1-hw1">
|
<scene sceneID="LRD-q1-hw1">
|
||||||
@@ -878,8 +879,8 @@
|
|||||||
<navigationBar key="navigationBar" contentMode="scaleToFill" id="wJo-mp-1pS">
|
<navigationBar key="navigationBar" contentMode="scaleToFill" id="wJo-mp-1pS">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
|
<rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<color key="tintColor" red="0.68773996829986572" green="0.71417498588562012" blue="0.73246318101882935" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="tintColor" red="0.68627450980392157" green="0.71372549019607845" blue="0.73333333333333328" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
<color key="barTintColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="barTintColor" red="0.12941176470588234" green="0.18431372549019609" blue="0.24705882352941178" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
<textAttributes key="titleTextAttributes">
|
<textAttributes key="titleTextAttributes">
|
||||||
<fontDescription key="fontDescription" name="HelveticaNeue-Thin" family="Helvetica Neue" pointSize="20"/>
|
<fontDescription key="fontDescription" name="HelveticaNeue-Thin" family="Helvetica Neue" pointSize="20"/>
|
||||||
<color key="textColor" red="0.68773996829986572" green="0.71417498588562012" blue="0.73246318101882935" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" red="0.68773996829986572" green="0.71417498588562012" blue="0.73246318101882935" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
@@ -894,36 +895,76 @@
|
|||||||
</objects>
|
</objects>
|
||||||
<point key="canvasLocation" x="4404" y="1144.5"/>
|
<point key="canvasLocation" x="4404" y="1144.5"/>
|
||||||
</scene>
|
</scene>
|
||||||
<!--SwiftUI Container View Controller-->
|
<!--LiveList-->
|
||||||
<scene sceneID="nAz-oS-mGy">
|
<scene sceneID="CXQ-vG-dtK">
|
||||||
<objects>
|
<objects>
|
||||||
<viewController id="bLr-DM-i2t" customClass="SwiftUIContainerViewController" customModule="CoreStoreDemo" customModuleProvider="target" sceneMemberID="viewController">
|
<collectionViewController id="EKY-1g-ALK" customClass="CollectionViewDemoViewController" customModule="CoreStoreDemo" customModuleProvider="target" sceneMemberID="viewController">
|
||||||
<layoutGuides>
|
<collectionView key="view" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" dataMode="prototypes" id="hx3-j3-Q80">
|
||||||
<viewControllerLayoutGuide type="top" id="3nJ-WH-imr"/>
|
<rect key="frame" x="0.0" y="0.0" width="375" height="311"/>
|
||||||
<viewControllerLayoutGuide type="bottom" id="Q1w-Zn-fPm"/>
|
|
||||||
</layoutGuides>
|
|
||||||
<view key="view" contentMode="scaleToFill" id="kof-sr-Xm1">
|
|
||||||
<rect key="frame" x="0.0" y="0.0" width="375" height="311.5"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" verticalCompressionResistancePriority="250" text="SwiftUI is not supported on this device/OS version" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" minimumScaleFactor="0.5" adjustsLetterSpacingToFitWidth="YES" translatesAutoresizingMaskIntoConstraints="NO" id="M6C-fv-74B">
|
|
||||||
<rect key="frame" x="16" y="126" width="343" height="60"/>
|
|
||||||
<fontDescription key="fontDescription" name="HelveticaNeue-Bold" family="Helvetica Neue" pointSize="25"/>
|
|
||||||
<color key="textColor" white="0.66666666666666663" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
|
||||||
<nil key="highlightedColor"/>
|
|
||||||
</label>
|
|
||||||
</subviews>
|
|
||||||
<color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
|
<color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
|
||||||
<constraints>
|
<collectionViewFlowLayout key="collectionViewLayout" automaticEstimatedItemSize="YES" minimumLineSpacing="10" minimumInteritemSpacing="10" id="X6n-f9-yEl">
|
||||||
<constraint firstAttribute="trailingMargin" secondItem="M6C-fv-74B" secondAttribute="trailing" id="68e-4i-uHt"/>
|
<size key="itemSize" width="50" height="50"/>
|
||||||
<constraint firstItem="M6C-fv-74B" firstAttribute="centerY" secondItem="kof-sr-Xm1" secondAttribute="centerY" id="W80-DR-xpp"/>
|
<size key="headerReferenceSize" width="50" height="50"/>
|
||||||
<constraint firstItem="M6C-fv-74B" firstAttribute="leading" secondItem="kof-sr-Xm1" secondAttribute="leadingMargin" id="nQs-sh-4BY"/>
|
<size key="footerReferenceSize" width="0.0" height="0.0"/>
|
||||||
</constraints>
|
<inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/>
|
||||||
</view>
|
</collectionViewFlowLayout>
|
||||||
</viewController>
|
<cells>
|
||||||
<placeholder placeholderIdentifier="IBFirstResponder" id="m7Z-UU-Jc8" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
|
<collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="PaletteCollectionViewCell" id="x2U-Yq-KAx" customClass="PaletteCollectionViewCell" customModule="CoreStoreDemo" customModuleProvider="target">
|
||||||
|
<rect key="frame" x="0.0" y="50" width="50" height="50"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<collectionViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" insetsLayoutMarginsFromSafeArea="NO" id="Alc-Is-Hc1">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="50" height="50"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<subviews>
|
||||||
|
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="NxF-xt-nas">
|
||||||
|
<rect key="frame" x="2" y="2" width="46" height="46"/>
|
||||||
|
<color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
|
||||||
|
</view>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="NxF-xt-nas" firstAttribute="leading" secondItem="Alc-Is-Hc1" secondAttribute="leading" constant="2" id="Hjb-0k-4HP"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="NxF-xt-nas" secondAttribute="trailing" constant="2" id="fKI-q8-bbI"/>
|
||||||
|
<constraint firstItem="NxF-xt-nas" firstAttribute="top" secondItem="Alc-Is-Hc1" secondAttribute="top" constant="2" id="qS6-eD-5T1"/>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="NxF-xt-nas" secondAttribute="bottom" constant="2" id="uWP-o0-nzA"/>
|
||||||
|
</constraints>
|
||||||
|
</collectionViewCellContentView>
|
||||||
|
<connections>
|
||||||
|
<outlet property="colorView" destination="NxF-xt-nas" id="ywq-kB-ycp"/>
|
||||||
|
</connections>
|
||||||
|
</collectionViewCell>
|
||||||
|
</cells>
|
||||||
|
<collectionReusableView key="sectionHeaderView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="PaletteCollectionSectionHeaderView" id="bRa-K0-IUz" customClass="PaletteCollectionSectionHeaderView" customModule="CoreStoreDemo" customModuleProvider="target">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="375" height="50"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="KHu-XO-jxd">
|
||||||
|
<rect key="frame" x="10" y="2" width="363" height="46"/>
|
||||||
|
<fontDescription key="fontDescription" name="HelveticaNeue-Medium" family="Helvetica Neue" pointSize="17"/>
|
||||||
|
<nil key="textColor"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="KHu-XO-jxd" secondAttribute="trailing" constant="2" id="Meb-ZG-6uP"/>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="KHu-XO-jxd" secondAttribute="bottom" constant="2" id="SL5-cA-7nf"/>
|
||||||
|
<constraint firstItem="KHu-XO-jxd" firstAttribute="top" secondItem="bRa-K0-IUz" secondAttribute="top" constant="2" id="VFE-35-4gg"/>
|
||||||
|
<constraint firstItem="KHu-XO-jxd" firstAttribute="leading" secondItem="bRa-K0-IUz" secondAttribute="leading" constant="10" id="pzx-h0-rZd"/>
|
||||||
|
</constraints>
|
||||||
|
<connections>
|
||||||
|
<outlet property="label" destination="KHu-XO-jxd" id="qqK-Rm-eww"/>
|
||||||
|
</connections>
|
||||||
|
</collectionReusableView>
|
||||||
|
<connections>
|
||||||
|
<outlet property="dataSource" destination="EKY-1g-ALK" id="way-Q8-Xhb"/>
|
||||||
|
<outlet property="delegate" destination="EKY-1g-ALK" id="r9k-Fz-mWc"/>
|
||||||
|
</connections>
|
||||||
|
</collectionView>
|
||||||
|
<navigationItem key="navigationItem" title="LiveList" id="goy-Zu-94A"/>
|
||||||
|
</collectionViewController>
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="Fmi-gN-RXz" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
|
||||||
</objects>
|
</objects>
|
||||||
<point key="canvasLocation" x="4404" y="1483.3583208395803"/>
|
<point key="canvasLocation" x="5156" y="1484"/>
|
||||||
</scene>
|
</scene>
|
||||||
<!--Time Zones-->
|
<!--Time Zones-->
|
||||||
<scene sceneID="nFT-bo-7y9">
|
<scene sceneID="nFT-bo-7y9">
|
||||||
@@ -1101,6 +1142,30 @@
|
|||||||
</objects>
|
</objects>
|
||||||
<point key="canvasLocation" x="4404" y="3055"/>
|
<point key="canvasLocation" x="4404" y="3055"/>
|
||||||
</scene>
|
</scene>
|
||||||
|
<!--Navigation Controller-->
|
||||||
|
<scene sceneID="s0N-is-CU8">
|
||||||
|
<objects>
|
||||||
|
<navigationController automaticallyAdjustsScrollViewInsets="NO" id="Rdw-NU-NaK" sceneMemberID="viewController">
|
||||||
|
<toolbarItems/>
|
||||||
|
<navigationBar key="navigationBar" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" id="clN-r9-yIR">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<color key="tintColor" red="0.68627450980000004" green="0.71372549019999998" blue="0.73333333329999995" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
|
<color key="barTintColor" red="0.12941176469999999" green="0.1840757281" blue="0.245942995" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
|
<textAttributes key="titleTextAttributes">
|
||||||
|
<fontDescription key="fontDescription" name="HelveticaNeue-Thin" family="Helvetica Neue" pointSize="21"/>
|
||||||
|
<color key="textColor" red="0.68627450980000004" green="0.71372549019999998" blue="0.73333333329999995" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
|
</textAttributes>
|
||||||
|
</navigationBar>
|
||||||
|
<nil name="viewControllers"/>
|
||||||
|
<connections>
|
||||||
|
<segue destination="EKY-1g-ALK" kind="relationship" relationship="rootViewController" id="CG7-LF-MHV"/>
|
||||||
|
</connections>
|
||||||
|
</navigationController>
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="qAN-O1-Rn4" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
|
||||||
|
</objects>
|
||||||
|
<point key="canvasLocation" x="4404" y="1484"/>
|
||||||
|
</scene>
|
||||||
</scenes>
|
</scenes>
|
||||||
<resources>
|
<resources>
|
||||||
<image name="second" width="30" height="30"/>
|
<image name="second" width="30" height="30"/>
|
||||||
|
|||||||
@@ -0,0 +1,169 @@
|
|||||||
|
//
|
||||||
|
// CollectionViewDemoViewController.swift
|
||||||
|
// CoreStoreDemo
|
||||||
|
//
|
||||||
|
// Created by John Estropia on 2019/10/17.
|
||||||
|
// Copyright © 2019 John Rommel Estropia. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
import CoreStore
|
||||||
|
|
||||||
|
|
||||||
|
// MARK: - CollectionViewDemoViewController
|
||||||
|
|
||||||
|
final class CollectionViewDemoViewController: UICollectionViewController {
|
||||||
|
|
||||||
|
// MARK: UIViewController
|
||||||
|
|
||||||
|
override func viewDidLoad() {
|
||||||
|
|
||||||
|
super.viewDidLoad()
|
||||||
|
|
||||||
|
let navigationItem = self.navigationItem
|
||||||
|
navigationItem.leftBarButtonItems = [
|
||||||
|
self.editButtonItem,
|
||||||
|
UIBarButtonItem(
|
||||||
|
barButtonSystemItem: .trash,
|
||||||
|
target: self,
|
||||||
|
action: #selector(self.resetBarButtonItemTouched(_:))
|
||||||
|
)
|
||||||
|
]
|
||||||
|
|
||||||
|
let filterBarButton = UIBarButtonItem(
|
||||||
|
title: ColorsDemo.filter.rawValue,
|
||||||
|
style: .plain,
|
||||||
|
target: self,
|
||||||
|
action: #selector(self.filterBarButtonItemTouched(_:))
|
||||||
|
)
|
||||||
|
navigationItem.rightBarButtonItems = [
|
||||||
|
UIBarButtonItem(
|
||||||
|
barButtonSystemItem: .add,
|
||||||
|
target: self,
|
||||||
|
action: #selector(self.addBarButtonItemTouched(_:))
|
||||||
|
),
|
||||||
|
UIBarButtonItem(
|
||||||
|
barButtonSystemItem: .refresh,
|
||||||
|
target: self,
|
||||||
|
action: #selector(self.shuffleBarButtonItemTouched(_:))
|
||||||
|
),
|
||||||
|
filterBarButton
|
||||||
|
]
|
||||||
|
self.filterBarButton = filterBarButton
|
||||||
|
|
||||||
|
self.dataSource = DiffableDataSource.CollectionView<Palette>(
|
||||||
|
collectionView: self.collectionView,
|
||||||
|
dataStack: ColorsDemo.stack,
|
||||||
|
cellProvider: { (collectionView, indexPath, palette) in
|
||||||
|
|
||||||
|
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "PaletteCollectionViewCell", for: indexPath) as! PaletteCollectionViewCell
|
||||||
|
cell.colorView?.backgroundColor = palette.color
|
||||||
|
cell.label?.text = palette.colorText
|
||||||
|
return cell
|
||||||
|
},
|
||||||
|
supplementaryViewProvider: { (collectionView, kind, indexPath) in
|
||||||
|
|
||||||
|
switch kind {
|
||||||
|
|
||||||
|
case UICollectionView.elementKindSectionHeader:
|
||||||
|
let view = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "PaletteCollectionSectionHeaderView", for: indexPath) as! PaletteCollectionSectionHeaderView
|
||||||
|
view.label?.text = ColorsDemo.palettes.sectionIdentifiers[indexPath.section]
|
||||||
|
return view
|
||||||
|
|
||||||
|
default:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
ColorsDemo.palettes.addObserver(self) { [weak self] (liveList) in
|
||||||
|
|
||||||
|
guard let self = self else {
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
self.filterBarButton?.title = ColorsDemo.filter.rawValue
|
||||||
|
self.dataSource?.apply(liveList.snapshot, animatingDifferences: true)
|
||||||
|
}
|
||||||
|
self.dataSource?.apply(ColorsDemo.palettes.snapshot, animatingDifferences: false)
|
||||||
|
}
|
||||||
|
|
||||||
|
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
|
||||||
|
|
||||||
|
super.prepare(for: segue, sender: sender)
|
||||||
|
|
||||||
|
switch (segue.identifier, segue.destination, sender) {
|
||||||
|
|
||||||
|
case ("ObjectObserverDemoViewController"?, let destinationViewController as ObjectObserverDemoViewController, let palette as LiveObject<Palette>):
|
||||||
|
destinationViewController.setPalette(palette)
|
||||||
|
|
||||||
|
default:
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// MARK: UICollectionViewDelegate
|
||||||
|
|
||||||
|
override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
|
||||||
|
|
||||||
|
collectionView.deselectItem(at: indexPath, animated: true)
|
||||||
|
|
||||||
|
self.performSegue(
|
||||||
|
withIdentifier: "ObjectObserverDemoViewController",
|
||||||
|
sender: ColorsDemo.palettes[indexPath: indexPath]
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// MARK: Private
|
||||||
|
|
||||||
|
private var filterBarButton: UIBarButtonItem?
|
||||||
|
private var dataSource: DiffableDataSource.CollectionView<Palette>?
|
||||||
|
|
||||||
|
deinit {
|
||||||
|
|
||||||
|
ColorsDemo.palettes.removeObserver(self)
|
||||||
|
}
|
||||||
|
|
||||||
|
@IBAction private dynamic func resetBarButtonItemTouched(_ sender: AnyObject?) {
|
||||||
|
|
||||||
|
ColorsDemo.stack.perform(
|
||||||
|
asynchronous: { (transaction) in
|
||||||
|
|
||||||
|
try transaction.deleteAll(From<Palette>())
|
||||||
|
},
|
||||||
|
completion: { _ in }
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
@IBAction private dynamic func filterBarButtonItemTouched(_ sender: AnyObject?) {
|
||||||
|
|
||||||
|
ColorsDemo.filter = ColorsDemo.filter.next()
|
||||||
|
}
|
||||||
|
|
||||||
|
@IBAction private dynamic func addBarButtonItemTouched(_ sender: AnyObject?) {
|
||||||
|
|
||||||
|
ColorsDemo.stack.perform(
|
||||||
|
asynchronous: { (transaction) in
|
||||||
|
|
||||||
|
let palette = transaction.create(Into<Palette>())
|
||||||
|
palette.setInitialValues(in: transaction)
|
||||||
|
},
|
||||||
|
completion: { _ in }
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
@IBAction private dynamic func shuffleBarButtonItemTouched(_ sender: AnyObject?) {
|
||||||
|
ColorsDemo.stack.perform(
|
||||||
|
asynchronous: { (transaction) in
|
||||||
|
|
||||||
|
for palette in try transaction.fetchAll(From<Palette>()) {
|
||||||
|
|
||||||
|
palette.hue .= Palette.randomHue()
|
||||||
|
palette.colorName .= nil
|
||||||
|
}
|
||||||
|
},
|
||||||
|
completion: { _ in }
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -45,10 +45,10 @@ struct ColorsDemo {
|
|||||||
|
|
||||||
didSet {
|
didSet {
|
||||||
|
|
||||||
// self.palettes.refetch(
|
self.palettes.refetch(
|
||||||
// self.filter.whereClause(),
|
self.filter.whereClause(),
|
||||||
// OrderBy<Palette>(.ascending(\.hue))
|
OrderBy<Palette>(.ascending(\.hue))
|
||||||
// )
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -68,6 +68,7 @@ class ListObserverDemoViewController: UITableViewController {
|
|||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
self.filterBarButton?.title = ColorsDemo.filter.rawValue
|
||||||
self.dataSource?.apply(liveList.snapshot, animatingDifferences: true)
|
self.dataSource?.apply(liveList.snapshot, animatingDifferences: true)
|
||||||
}
|
}
|
||||||
self.dataSource?.apply(ColorsDemo.palettes.snapshot, animatingDifferences: false)
|
self.dataSource?.apply(ColorsDemo.palettes.snapshot, animatingDifferences: false)
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
//
|
||||||
|
// PaletteCollectionSectionHeaderView.swift
|
||||||
|
// CoreStoreDemo
|
||||||
|
//
|
||||||
|
// Created by John Estropia on 2019/10/17.
|
||||||
|
// Copyright © 2019 John Rommel Estropia. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
|
||||||
|
// MARK: - PaletteCollectionSectionHeaderView
|
||||||
|
|
||||||
|
final class PaletteCollectionSectionHeaderView: UICollectionReusableView {
|
||||||
|
|
||||||
|
@IBOutlet weak var label: UILabel?
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
//
|
||||||
|
// PaletteCollectionViewCell.swift
|
||||||
|
// CoreStoreDemo
|
||||||
|
//
|
||||||
|
// Created by John Estropia on 2019/10/17.
|
||||||
|
// Copyright © 2019 John Rommel Estropia. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
|
||||||
|
// MARK: - PaletteCollectionViewCell
|
||||||
|
|
||||||
|
final class PaletteCollectionViewCell: UICollectionViewCell {
|
||||||
|
|
||||||
|
@IBOutlet weak var colorView: UIView?
|
||||||
|
@IBOutlet weak var label: UILabel?
|
||||||
|
}
|
||||||
@@ -8,7 +8,10 @@
|
|||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
class PaletteTableViewCell: UITableViewCell {
|
|
||||||
|
// MARK: - PaletteTableViewCell
|
||||||
|
|
||||||
|
final class PaletteTableViewCell: UITableViewCell {
|
||||||
|
|
||||||
@IBOutlet weak var colorView: UIView?
|
@IBOutlet weak var colorView: UIView?
|
||||||
@IBOutlet weak var label: UILabel?
|
@IBOutlet weak var label: UILabel?
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
<key>CFBundlePackageType</key>
|
<key>CFBundlePackageType</key>
|
||||||
<string>FMWK</string>
|
<string>FMWK</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>6.3.2</string>
|
<string>$(MARKETING_VERSION)</string>
|
||||||
<key>CFBundleSignature</key>
|
<key>CFBundleSignature</key>
|
||||||
<string>????</string>
|
<string>????</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
|
|||||||
@@ -178,11 +178,53 @@ public final class LiveList<O: DynamicObject>: Hashable {
|
|||||||
self.observers.removeObject(forKey: observer)
|
self.observers.removeObject(forKey: observer)
|
||||||
}
|
}
|
||||||
|
|
||||||
deinit {
|
|
||||||
|
|
||||||
self.observers.removeAllObjects()
|
// MARK: Public (Refetching)
|
||||||
|
|
||||||
|
/**
|
||||||
|
Asks the `ListMonitor` to refetch its objects using the specified series of `FetchClause`s. Note that this method does not execute the fetch immediately; the actual fetching will happen after the `NSFetchedResultsController`'s last `controllerDidChangeContent(_:)` notification completes.
|
||||||
|
|
||||||
|
`refetch(...)` broadcasts `listMonitorWillRefetch(...)` to its observers immediately, and then `listMonitorDidRefetch(...)` after the new fetch request completes.
|
||||||
|
|
||||||
|
- parameter fetchClauses: a series of `FetchClause` instances for fetching the object list. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
||||||
|
- Important: Starting CoreStore 4.0, all `FetchClause`s required by the `ListMonitor` should be provided in the arguments list of `refetch(...)`.
|
||||||
|
*/
|
||||||
|
public func refetch(_ fetchClauses: FetchClause...) {
|
||||||
|
|
||||||
|
self.refetch(fetchClauses)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Asks the `ListMonitor` to refetch its objects using the specified series of `FetchClause`s. Note that this method does not execute the fetch immediately; the actual fetching will happen after the `NSFetchedResultsController`'s last `controllerDidChangeContent(_:)` notification completes.
|
||||||
|
|
||||||
|
`refetch(...)` broadcasts `listMonitorWillRefetch(...)` to its observers immediately, and then `listMonitorDidRefetch(...)` after the new fetch request completes.
|
||||||
|
|
||||||
|
- parameter fetchClauses: a series of `FetchClause` instances for fetching the object list. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
||||||
|
- Important: Starting CoreStore 4.0, all `FetchClause`s required by the `ListMonitor` should be provided in the arguments list of `refetch(...)`.
|
||||||
|
*/
|
||||||
|
public func refetch(_ fetchClauses: [FetchClause]) {
|
||||||
|
|
||||||
|
self.refetch { (fetchRequest) in
|
||||||
|
|
||||||
|
fetchClauses.forEach { $0.applyToFetchRequest(fetchRequest) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// MARK: Public (3rd Party Utilities)
|
||||||
|
|
||||||
|
/**
|
||||||
|
Allow external libraries to store custom data in the `ListMonitor`. App code should rarely have a need for this.
|
||||||
|
```
|
||||||
|
enum Static {
|
||||||
|
static var myDataKey: Void?
|
||||||
|
}
|
||||||
|
monitor.userInfo[&Static.myDataKey] = myObject
|
||||||
|
```
|
||||||
|
- Important: Do not use this method to store thread-sensitive data.
|
||||||
|
*/
|
||||||
|
public let userInfo = UserInfo()
|
||||||
|
|
||||||
|
|
||||||
// MARK: Equatable
|
// MARK: Equatable
|
||||||
|
|
||||||
@@ -253,6 +295,44 @@ public final class LiveList<O: DynamicObject>: Hashable {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal func refetch(_ applyFetchClauses: @escaping (_ fetchRequest: Internals.CoreStoreFetchRequest<NSManagedObject>) -> Void) {
|
||||||
|
|
||||||
|
self.applyFetchClauses = applyFetchClauses
|
||||||
|
|
||||||
|
DispatchQueue.main.async { [weak self] () -> Void in
|
||||||
|
|
||||||
|
guard let `self` = self else {
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
let (newFetchedResultsController, newFetchedResultsControllerDelegate) = Self.recreateFetchedResultsController(
|
||||||
|
context: self.fetchedResultsController.managedObjectContext,
|
||||||
|
from: self.from,
|
||||||
|
sectionBy: self.sectionBy,
|
||||||
|
applyFetchClauses: self.applyFetchClauses
|
||||||
|
)
|
||||||
|
newFetchedResultsControllerDelegate.handler = self
|
||||||
|
|
||||||
|
do {
|
||||||
|
|
||||||
|
try newFetchedResultsController.performFetchFromSpecifiedStores()
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
|
||||||
|
// DataStack may have been deallocated
|
||||||
|
return
|
||||||
|
}
|
||||||
|
(self.fetchedResultsController, self.fetchedResultsControllerDelegate) = (newFetchedResultsController, newFetchedResultsControllerDelegate)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
deinit {
|
||||||
|
|
||||||
|
self.fetchedResultsControllerDelegate.fetchedResultsController = nil
|
||||||
|
self.observers.removeAllObjects()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// MARK: FilePrivate
|
// MARK: FilePrivate
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user