mirror of
https://github.com/JohnEstropia/CoreStore.git
synced 2026-03-29 13:51:48 +02:00
removed long-standing workaround for NSFetchedResultsController bugs since they seem to be fixed
This commit is contained in:
@@ -1,14 +1,11 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="12121" systemVersion="16G29" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="Ni8-QF-XHB">
|
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14460.31" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="Ni8-QF-XHB">
|
||||||
<device id="retina4_7" orientation="portrait">
|
<device id="retina4_7" orientation="portrait">
|
||||||
<adaptation id="fullscreen"/>
|
<adaptation id="fullscreen"/>
|
||||||
</device>
|
</device>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment identifier="iOS"/>
|
<deployment identifier="iOS"/>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12089"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14460.20"/>
|
||||||
<capability name="Aspect ratio constraints" minToolsVersion="5.1"/>
|
|
||||||
<capability name="Constraints to layout margins" minToolsVersion="6.0"/>
|
|
||||||
<capability name="Constraints with non-1.0 multipliers" minToolsVersion="5.1"/>
|
|
||||||
<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">
|
||||||
@@ -78,14 +75,14 @@
|
|||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Title" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="8b8-lM-Krq">
|
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Title" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="8b8-lM-Krq">
|
||||||
<rect key="frame" x="15" y="13" width="28.5" height="19"/>
|
<rect key="frame" x="16" y="13" width="28.5" height="19"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="16"/>
|
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="16"/>
|
||||||
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Subtitle" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="hR1-Zb-BOk">
|
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Subtitle" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="hR1-Zb-BOk">
|
||||||
<rect key="frame" x="308" y="13" width="52" height="19"/>
|
<rect key="frame" x="307" y="13" width="52" height="19"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="16"/>
|
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="16"/>
|
||||||
<color key="textColor" red="0.55686274509803924" green="0.55686274509803924" blue="0.57647058823529407" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" red="0.55686274509803924" green="0.55686274509803924" blue="0.57647058823529407" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
@@ -136,7 +133,7 @@
|
|||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<button opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="OQf-Bd-Zze">
|
<button opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="OQf-Bd-Zze">
|
||||||
<rect key="frame" x="295" y="8" width="72" height="27.5"/>
|
<rect key="frame" x="288" y="11" width="72" height="22"/>
|
||||||
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
|
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
|
||||||
<inset key="contentEdgeInsets" minX="7" minY="0.0" maxX="7" maxY="0.0"/>
|
<inset key="contentEdgeInsets" minX="7" minY="0.0" maxX="7" maxY="0.0"/>
|
||||||
<state key="normal" title="mutate!"/>
|
<state key="normal" title="mutate!"/>
|
||||||
@@ -145,7 +142,7 @@
|
|||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="VZk-6K-4ut">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="VZk-6K-4ut">
|
||||||
<rect key="frame" x="15" y="8" width="270" height="27.5"/>
|
<rect key="frame" x="22" y="11" width="256" height="22"/>
|
||||||
<fontDescription key="fontDescription" name="HelveticaNeue-Thin" family="Helvetica Neue" pointSize="17"/>
|
<fontDescription key="fontDescription" name="HelveticaNeue-Thin" family="Helvetica Neue" pointSize="17"/>
|
||||||
<color key="textColor" red="0.15542715787887573" green="0.2203737199306488" blue="0.2959403395652771" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" red="0.15542715787887573" green="0.2203737199306488" blue="0.2959403395652771" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
@@ -275,18 +272,18 @@
|
|||||||
<rect key="frame" x="0.0" y="35" width="375" height="50"/>
|
<rect key="frame" x="0.0" y="35" width="375" height="50"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="AXm-KE-45G" id="9te-Wx-hkf">
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="AXm-KE-45G" id="9te-Wx-hkf">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="342" height="49.5"/>
|
<rect key="frame" x="0.0" y="0.0" width="341" height="49.5"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Accounts" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="Q3n-Df-v1t">
|
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Accounts" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="Q3n-Df-v1t">
|
||||||
<rect key="frame" x="15" y="6" width="82" height="24"/>
|
<rect key="frame" x="16" y="6" width="82" height="24"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="20"/>
|
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="20"/>
|
||||||
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Setting up multiple persistent store configurations" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="Hbn-cf-Y7m">
|
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Setting up multiple persistent store configurations" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="Hbn-cf-Y7m">
|
||||||
<rect key="frame" x="15" y="30" width="263.5" height="13.5"/>
|
<rect key="frame" x="16" y="30" width="263.5" height="13.5"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<fontDescription key="fontDescription" type="system" pointSize="11"/>
|
<fontDescription key="fontDescription" type="system" pointSize="11"/>
|
||||||
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
@@ -302,18 +299,18 @@
|
|||||||
<rect key="frame" x="0.0" y="85" width="375" height="50"/>
|
<rect key="frame" x="0.0" y="85" width="375" height="50"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="fsb-zw-8Ii" id="Upm-AO-Fw3">
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="fsb-zw-8Ii" id="Upm-AO-Fw3">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="342" height="49.5"/>
|
<rect key="frame" x="0.0" y="0.0" width="341" height="49.5"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Colors" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="vpt-cT-gMo">
|
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Colors" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="vpt-cT-gMo">
|
||||||
<rect key="frame" x="15" y="6" width="56" height="24"/>
|
<rect key="frame" x="16" y="6" width="56" height="24"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="20"/>
|
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="20"/>
|
||||||
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Observing list changes and single object changes" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="ou9-TZ-8bf">
|
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Observing list changes and single object changes" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="ou9-TZ-8bf">
|
||||||
<rect key="frame" x="15" y="30" width="260.5" height="13.5"/>
|
<rect key="frame" x="16" y="30" width="260.5" height="13.5"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<fontDescription key="fontDescription" type="system" pointSize="11"/>
|
<fontDescription key="fontDescription" type="system" pointSize="11"/>
|
||||||
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
@@ -329,18 +326,18 @@
|
|||||||
<rect key="frame" x="0.0" y="135" width="375" height="50"/>
|
<rect key="frame" x="0.0" y="135" width="375" height="50"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="ekW-PJ-mbo" id="CYq-mg-PVS">
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="ekW-PJ-mbo" id="CYq-mg-PVS">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="342" height="49.5"/>
|
<rect key="frame" x="0.0" y="0.0" width="341" height="49.5"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Placemarks" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="UbU-Kd-yrY">
|
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Placemarks" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="UbU-Kd-yrY">
|
||||||
<rect key="frame" x="15" y="6" width="100.5" height="24"/>
|
<rect key="frame" x="16" y="6" width="100.5" height="24"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="20"/>
|
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="20"/>
|
||||||
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Making changes with transactions" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="uP1-Jc-o9v">
|
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Making changes with transactions" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="uP1-Jc-o9v">
|
||||||
<rect key="frame" x="15" y="30" width="179" height="13.5"/>
|
<rect key="frame" x="16" y="30" width="179" height="13.5"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<fontDescription key="fontDescription" type="system" pointSize="11"/>
|
<fontDescription key="fontDescription" type="system" pointSize="11"/>
|
||||||
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
@@ -356,18 +353,18 @@
|
|||||||
<rect key="frame" x="0.0" y="185" width="375" height="50"/>
|
<rect key="frame" x="0.0" y="185" width="375" height="50"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="ph1-8z-C1m" id="nNz-rd-ksg">
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="ph1-8z-C1m" id="nNz-rd-ksg">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="342" height="49.5"/>
|
<rect key="frame" x="0.0" y="0.0" width="341" height="49.5"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Time Zones" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="C8Y-0y-lEG">
|
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Time Zones" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="C8Y-0y-lEG">
|
||||||
<rect key="frame" x="15" y="6" width="101.5" height="24"/>
|
<rect key="frame" x="16" y="6" width="101.5" height="24"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="20"/>
|
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="20"/>
|
||||||
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Fetching objects and raw values" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="jZw-qE-0ws">
|
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Fetching objects and raw values" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="jZw-qE-0ws">
|
||||||
<rect key="frame" x="15" y="30" width="168.5" height="13.5"/>
|
<rect key="frame" x="16" y="30" width="168.5" height="13.5"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<fontDescription key="fontDescription" type="system" pointSize="11"/>
|
<fontDescription key="fontDescription" type="system" pointSize="11"/>
|
||||||
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
@@ -383,18 +380,18 @@
|
|||||||
<rect key="frame" x="0.0" y="235" width="375" height="50"/>
|
<rect key="frame" x="0.0" y="235" width="375" height="50"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="wyK-rk-3tI" id="fLd-KK-QcW">
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="wyK-rk-3tI" id="fLd-KK-QcW">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="342" height="49.5"/>
|
<rect key="frame" x="0.0" y="0.0" width="341" height="49.5"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Logger" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="ZfY-Aq-Ykq">
|
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Logger" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="ZfY-Aq-Ykq">
|
||||||
<rect key="frame" x="15" y="6" width="61" height="24"/>
|
<rect key="frame" x="16" y="6" width="61" height="24"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="20"/>
|
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="20"/>
|
||||||
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Implementing a custom logger" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="QzD-9b-k1j">
|
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Implementing a custom logger" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="QzD-9b-k1j">
|
||||||
<rect key="frame" x="15" y="30" width="159" height="13.5"/>
|
<rect key="frame" x="16" y="30" width="159" height="13.5"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<fontDescription key="fontDescription" type="system" pointSize="11"/>
|
<fontDescription key="fontDescription" type="system" pointSize="11"/>
|
||||||
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
@@ -410,18 +407,18 @@
|
|||||||
<rect key="frame" x="0.0" y="285" width="375" height="50"/>
|
<rect key="frame" x="0.0" y="285" width="375" height="50"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="xTM-Cf-0if" id="DfO-BW-krd">
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="xTM-Cf-0if" id="DfO-BW-krd">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="342" height="49.5"/>
|
<rect key="frame" x="0.0" y="0.0" width="341" height="49.5"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Evolution" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="hSG-mG-YBw">
|
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Evolution" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="hSG-mG-YBw">
|
||||||
<rect key="frame" x="15" y="6" width="78.5" height="24"/>
|
<rect key="frame" x="16" y="6" width="78.5" height="24"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="20"/>
|
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="20"/>
|
||||||
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Migrating and de-migrating stores" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="X9P-TQ-LYh">
|
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Migrating and de-migrating stores" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="X9P-TQ-LYh">
|
||||||
<rect key="frame" x="15" y="30" width="179.5" height="13.5"/>
|
<rect key="frame" x="16" y="30" width="179.5" height="13.5"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<fontDescription key="fontDescription" type="system" pointSize="11"/>
|
<fontDescription key="fontDescription" type="system" pointSize="11"/>
|
||||||
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
@@ -460,7 +457,7 @@
|
|||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<view contentMode="scaleToFill" verticalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="NhC-oM-bkd">
|
<view contentMode="scaleToFill" verticalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="NhC-oM-bkd">
|
||||||
<rect key="frame" x="16" y="89.5" width="343" height="50"/>
|
<rect key="frame" x="16" y="69.5" width="343" height="70"/>
|
||||||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="height" relation="greaterThanOrEqual" id="TIX-qi-B34"/>
|
<constraint firstAttribute="height" relation="greaterThanOrEqual" id="TIX-qi-B34"/>
|
||||||
@@ -512,7 +509,7 @@
|
|||||||
</connections>
|
</connections>
|
||||||
</slider>
|
</slider>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="p4O-tf-dgt">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="p4O-tf-dgt">
|
||||||
<rect key="frame" x="16" y="69" width="343" height="20.5"/>
|
<rect key="frame" x="16" y="49" width="343" height="20.5"/>
|
||||||
<fontDescription key="fontDescription" type="boldSystem" pointSize="17"/>
|
<fontDescription key="fontDescription" type="boldSystem" pointSize="17"/>
|
||||||
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
@@ -623,7 +620,7 @@
|
|||||||
<tabBarItem key="tabBarItem" title="Demo" image="second" id="3iQ-I2-4LW"/>
|
<tabBarItem key="tabBarItem" title="Demo" image="second" id="3iQ-I2-4LW"/>
|
||||||
<toolbarItems/>
|
<toolbarItems/>
|
||||||
<navigationBar key="navigationBar" contentMode="scaleToFill" id="00L-5k-Eno">
|
<navigationBar key="navigationBar" contentMode="scaleToFill" id="00L-5k-Eno">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
|
<rect key="frame" x="0.0" y="20" width="375" height="44"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<color key="tintColor" red="0.90744441747665405" green="0.9265514612197876" blue="0.93116652965545654" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="tintColor" red="0.90744441747665405" green="0.9265514612197876" blue="0.93116652965545654" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
<color key="barTintColor" red="0.15542715787887573" green="0.2203737199306488" blue="0.2959403395652771" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="barTintColor" red="0.15542715787887573" green="0.2203737199306488" blue="0.2959403395652771" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
@@ -653,18 +650,18 @@
|
|||||||
<rect key="frame" x="0.0" y="22" width="375" height="44"/>
|
<rect key="frame" x="0.0" y="22" width="375" height="44"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="G3X-70-BCD" id="aT8-nz-i5l">
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="G3X-70-BCD" id="aT8-nz-i5l">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="342" height="43.5"/>
|
<rect key="frame" x="0.0" y="0.0" width="341" height="43.5"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="uQX-PI-UWF">
|
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="uQX-PI-UWF">
|
||||||
<rect key="frame" x="8" y="8" width="27" height="27"/>
|
<rect key="frame" x="16" y="11" width="22" height="22"/>
|
||||||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="width" secondItem="uQX-PI-UWF" secondAttribute="height" multiplier="1:1" id="9qA-iN-Neb"/>
|
<constraint firstAttribute="width" secondItem="uQX-PI-UWF" secondAttribute="height" multiplier="1:1" id="9qA-iN-Neb"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
</view>
|
</view>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="HJC-5w-lIN">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="HJC-5w-lIN">
|
||||||
<rect key="frame" x="45" y="8" width="34.5" height="27"/>
|
<rect key="frame" x="48" y="11" width="34.5" height="22"/>
|
||||||
<fontDescription key="fontDescription" name="HelveticaNeue" family="Helvetica Neue" pointSize="14"/>
|
<fontDescription key="fontDescription" name="HelveticaNeue" family="Helvetica Neue" pointSize="14"/>
|
||||||
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
@@ -713,18 +710,18 @@
|
|||||||
<rect key="frame" x="0.0" y="22" width="375" height="44"/>
|
<rect key="frame" x="0.0" y="22" width="375" height="44"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="zSO-3e-OVq" id="cHA-by-n4b">
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="zSO-3e-OVq" id="cHA-by-n4b">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="342" height="43.5"/>
|
<rect key="frame" x="0.0" y="0.0" width="341" height="43.5"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="5uq-Yi-XwH">
|
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="5uq-Yi-XwH">
|
||||||
<rect key="frame" x="8" y="8" width="27" height="27"/>
|
<rect key="frame" x="16" y="11" width="22" height="22"/>
|
||||||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="width" secondItem="5uq-Yi-XwH" secondAttribute="height" multiplier="1:1" id="oOe-HC-VyN"/>
|
<constraint firstAttribute="width" secondItem="5uq-Yi-XwH" secondAttribute="height" multiplier="1:1" id="oOe-HC-VyN"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
</view>
|
</view>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Zyu-PC-WmO">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Zyu-PC-WmO">
|
||||||
<rect key="frame" x="45" y="8" width="34.5" height="27"/>
|
<rect key="frame" x="48" y="11" width="34.5" height="22"/>
|
||||||
<fontDescription key="fontDescription" name="HelveticaNeue" family="Helvetica Neue" pointSize="14"/>
|
<fontDescription key="fontDescription" name="HelveticaNeue" family="Helvetica Neue" pointSize="14"/>
|
||||||
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
@@ -767,7 +764,7 @@
|
|||||||
<extendedEdge key="edgesForExtendedLayout" bottom="YES"/>
|
<extendedEdge key="edgesForExtendedLayout" bottom="YES"/>
|
||||||
<toolbarItems/>
|
<toolbarItems/>
|
||||||
<navigationBar key="navigationBar" contentMode="scaleToFill" id="6XA-6M-yvZ">
|
<navigationBar key="navigationBar" contentMode="scaleToFill" id="6XA-6M-yvZ">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="320" 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.68773996829986572" green="0.71417498588562012" blue="0.73246318101882935" 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.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
@@ -794,11 +791,11 @@
|
|||||||
<viewControllerLayoutGuide type="bottom" id="RZg-hi-T8O"/>
|
<viewControllerLayoutGuide type="bottom" id="RZg-hi-T8O"/>
|
||||||
</layoutGuides>
|
</layoutGuides>
|
||||||
<view key="view" contentMode="scaleToFill" id="k4s-iL-Krh">
|
<view key="view" contentMode="scaleToFill" id="k4s-iL-Krh">
|
||||||
<rect key="frame" x="0.0" y="64" width="375" height="603"/>
|
<rect key="frame" x="0.0" y="0.0" width="375" height="603"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<mapView verifyAmbiguity="ignoreSizes" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" ambiguous="YES" mapType="standard" translatesAutoresizingMaskIntoConstraints="NO" id="V2U-0R-Ts0">
|
<mapView verifyAmbiguity="ignoreSizes" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" mapType="standard" translatesAutoresizingMaskIntoConstraints="NO" id="V2U-0R-Ts0">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="375" height="558"/>
|
<rect key="frame" x="0.0" y="0.0" width="375" height="603"/>
|
||||||
<connections>
|
<connections>
|
||||||
<outlet property="delegate" destination="jPl-fH-NlD" id="Sjn-YC-haS"/>
|
<outlet property="delegate" destination="jPl-fH-NlD" id="Sjn-YC-haS"/>
|
||||||
</connections>
|
</connections>
|
||||||
@@ -888,7 +885,7 @@
|
|||||||
<extendedEdge key="edgesForExtendedLayout" bottom="YES"/>
|
<extendedEdge key="edgesForExtendedLayout" bottom="YES"/>
|
||||||
<toolbarItems/>
|
<toolbarItems/>
|
||||||
<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="320" 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.68773996829986572" green="0.71417498588562012" blue="0.73246318101882935" 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.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
@@ -1008,14 +1005,14 @@
|
|||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="name" lineBreakMode="wordWrap" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="RgX-yK-1L2">
|
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="name" lineBreakMode="wordWrap" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="RgX-yK-1L2">
|
||||||
<rect key="frame" x="15" y="11" width="48.5" height="24"/>
|
<rect key="frame" x="16" y="11" width="48.5" height="24"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="20"/>
|
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="20"/>
|
||||||
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="offset" lineBreakMode="wordWrap" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="QZ4-A2-x4h">
|
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="offset" lineBreakMode="wordWrap" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="QZ4-A2-x4h">
|
||||||
<rect key="frame" x="15" y="35" width="31" height="13.5"/>
|
<rect key="frame" x="16" y="35" width="31" height="13.5"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<fontDescription key="fontDescription" type="system" pointSize="11"/>
|
<fontDescription key="fontDescription" type="system" pointSize="11"/>
|
||||||
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
@@ -1054,14 +1051,14 @@
|
|||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="name" lineBreakMode="wordWrap" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="Syt-QJ-KXg">
|
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="name" lineBreakMode="wordWrap" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="Syt-QJ-KXg">
|
||||||
<rect key="frame" x="15" y="11" width="48.5" height="24"/>
|
<rect key="frame" x="16" y="11" width="48.5" height="24"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="20"/>
|
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="20"/>
|
||||||
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="offset" lineBreakMode="wordWrap" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="yHS-dP-IKS">
|
<label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="offset" lineBreakMode="wordWrap" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="yHS-dP-IKS">
|
||||||
<rect key="frame" x="15" y="35" width="31" height="13.5"/>
|
<rect key="frame" x="16" y="35" width="31" height="13.5"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
<fontDescription key="fontDescription" type="system" pointSize="11"/>
|
<fontDescription key="fontDescription" type="system" pointSize="11"/>
|
||||||
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" red="0.13079629838466644" green="0.184075728058815" blue="0.24594299495220184" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
|
|||||||
@@ -122,6 +122,11 @@ class ListObserverDemoViewController: UITableViewController, ListSectionObserver
|
|||||||
target: self,
|
target: self,
|
||||||
action: #selector(self.addBarButtonItemTouched(_:))
|
action: #selector(self.addBarButtonItemTouched(_:))
|
||||||
),
|
),
|
||||||
|
UIBarButtonItem(
|
||||||
|
barButtonSystemItem: .refresh,
|
||||||
|
target: self,
|
||||||
|
action: #selector(self.shuffleBarButtonItemTouched(_:))
|
||||||
|
),
|
||||||
filterBarButton
|
filterBarButton
|
||||||
]
|
]
|
||||||
self.filterBarButton = filterBarButton
|
self.filterBarButton = filterBarButton
|
||||||
@@ -305,6 +310,21 @@ class ListObserverDemoViewController: UITableViewController, ListSectionObserver
|
|||||||
completion: { _ in }
|
completion: { _ in }
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@IBAction private dynamic func shuffleBarButtonItemTouched(_ sender: AnyObject?) {
|
||||||
|
|
||||||
|
ColorsDemo.stack.perform(
|
||||||
|
asynchronous: { (transaction) in
|
||||||
|
|
||||||
|
for palette in (transaction.fetchAll(From<Palette>()) ?? []) {
|
||||||
|
|
||||||
|
palette.hue .= Palette.randomHue()
|
||||||
|
palette.colorName .= nil
|
||||||
|
}
|
||||||
|
},
|
||||||
|
completion: { _ in }
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
private func setTable(enabled: Bool) {
|
private func setTable(enabled: Bool) {
|
||||||
|
|
||||||
|
|||||||
@@ -25,6 +25,11 @@ final class Palette: CoreStoreObject {
|
|||||||
isTransient: true,
|
isTransient: true,
|
||||||
customGetter: Palette.getColorName
|
customGetter: Palette.getColorName
|
||||||
)
|
)
|
||||||
|
|
||||||
|
static func randomHue() -> Int {
|
||||||
|
|
||||||
|
return Int(arc4random_uniform(360))
|
||||||
|
}
|
||||||
|
|
||||||
private static func getColorName(_ partialObject: PartialObject<Palette>) -> String? {
|
private static func getColorName(_ partialObject: PartialObject<Palette>) -> String? {
|
||||||
|
|
||||||
@@ -71,7 +76,7 @@ extension Palette {
|
|||||||
|
|
||||||
func setInitialValues(in transaction: BaseDataTransaction) {
|
func setInitialValues(in transaction: BaseDataTransaction) {
|
||||||
|
|
||||||
self.hue .= Int(arc4random_uniform(360))
|
self.hue .= Palette.randomHue()
|
||||||
self.saturation .= Float(1.0)
|
self.saturation .= Float(1.0)
|
||||||
self.brightness .= Float(arc4random_uniform(70) + 30) / 100.0
|
self.brightness .= Float(arc4random_uniform(70) + 30) / 100.0
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,6 +47,12 @@ public protocol CoreStoreObjectKeyValueObservation: class {
|
|||||||
|
|
||||||
extension ValueContainer.Required {
|
extension ValueContainer.Required {
|
||||||
|
|
||||||
|
/**
|
||||||
|
Observes changes in the receiver value. When the returned `CoreStoreObjectKeyValueObservation` is deinited or invalidated, it will stop observing.
|
||||||
|
|
||||||
|
- parameter options: The flags indicating which values to include in the change dictionary.
|
||||||
|
- parameter: changeHandler: The closure called when the value is updated.
|
||||||
|
*/
|
||||||
public func observe(options: NSKeyValueObservingOptions = [], changeHandler: @escaping (O, CoreStoreObjectValueDiff<V>) -> Void) -> CoreStoreObjectKeyValueObservation {
|
public func observe(options: NSKeyValueObservingOptions = [], changeHandler: @escaping (O, CoreStoreObjectValueDiff<V>) -> Void) -> CoreStoreObjectKeyValueObservation {
|
||||||
|
|
||||||
return self.observe(with: options, changeHandler: changeHandler)
|
return self.observe(with: options, changeHandler: changeHandler)
|
||||||
@@ -58,6 +64,12 @@ extension ValueContainer.Required {
|
|||||||
|
|
||||||
extension ValueContainer.Optional {
|
extension ValueContainer.Optional {
|
||||||
|
|
||||||
|
/**
|
||||||
|
Observes changes in the receiver value. When the returned `CoreStoreObjectKeyValueObservation` is deinited or invalidated, it will stop observing.
|
||||||
|
|
||||||
|
- parameter options: The flags indicating which values to include in the change dictionary.
|
||||||
|
- parameter: changeHandler: The closure called when the value is updated.
|
||||||
|
*/
|
||||||
public func observe(options: NSKeyValueObservingOptions = [], changeHandler: @escaping (O, CoreStoreObjectValueDiff<V>) -> Void) -> CoreStoreObjectKeyValueObservation {
|
public func observe(options: NSKeyValueObservingOptions = [], changeHandler: @escaping (O, CoreStoreObjectValueDiff<V>) -> Void) -> CoreStoreObjectKeyValueObservation {
|
||||||
|
|
||||||
return self.observe(with: options, changeHandler: changeHandler)
|
return self.observe(with: options, changeHandler: changeHandler)
|
||||||
@@ -69,6 +81,12 @@ extension ValueContainer.Optional {
|
|||||||
|
|
||||||
extension TransformableContainer.Required {
|
extension TransformableContainer.Required {
|
||||||
|
|
||||||
|
/**
|
||||||
|
Observes changes in the receiver value. When the returned `CoreStoreObjectKeyValueObservation` is deinited or invalidated, it will stop observing.
|
||||||
|
|
||||||
|
- parameter options: The flags indicating which values to include in the change dictionary.
|
||||||
|
- parameter: changeHandler: The closure called when the value is updated.
|
||||||
|
*/
|
||||||
public func observe(options: NSKeyValueObservingOptions = [], changeHandler: @escaping (O, CoreStoreObjectTransformableDiff<V>) -> Void) -> CoreStoreObjectKeyValueObservation {
|
public func observe(options: NSKeyValueObservingOptions = [], changeHandler: @escaping (O, CoreStoreObjectTransformableDiff<V>) -> Void) -> CoreStoreObjectKeyValueObservation {
|
||||||
|
|
||||||
return self.observe(with: options, changeHandler: changeHandler)
|
return self.observe(with: options, changeHandler: changeHandler)
|
||||||
@@ -80,6 +98,12 @@ extension TransformableContainer.Required {
|
|||||||
|
|
||||||
extension TransformableContainer.Optional {
|
extension TransformableContainer.Optional {
|
||||||
|
|
||||||
|
/**
|
||||||
|
Observes changes in the receiver value. When the returned `CoreStoreObjectKeyValueObservation` is deinited or invalidated, it will stop observing.
|
||||||
|
|
||||||
|
- parameter options: The flags indicating which values to include in the change dictionary.
|
||||||
|
- parameter: changeHandler: The closure called when the value is updated.
|
||||||
|
*/
|
||||||
public func observe(options: NSKeyValueObservingOptions = [], changeHandler: @escaping (O, CoreStoreObjectTransformableDiff<V>) -> Void) -> CoreStoreObjectKeyValueObservation {
|
public func observe(options: NSKeyValueObservingOptions = [], changeHandler: @escaping (O, CoreStoreObjectTransformableDiff<V>) -> Void) -> CoreStoreObjectKeyValueObservation {
|
||||||
|
|
||||||
return self.observe(with: options, changeHandler: changeHandler)
|
return self.observe(with: options, changeHandler: changeHandler)
|
||||||
@@ -91,6 +115,12 @@ extension TransformableContainer.Optional {
|
|||||||
|
|
||||||
extension RelationshipContainer.ToOne {
|
extension RelationshipContainer.ToOne {
|
||||||
|
|
||||||
|
/**
|
||||||
|
Observes changes in the receiver value. When the returned `CoreStoreObjectKeyValueObservation` is deinited or invalidated, it will stop observing.
|
||||||
|
|
||||||
|
- parameter options: The flags indicating which values to include in the change dictionary.
|
||||||
|
- parameter: changeHandler: The closure called when the value is updated.
|
||||||
|
*/
|
||||||
public func observe(options: NSKeyValueObservingOptions = [], changeHandler: @escaping (O, CoreStoreObjectObjectDiff<D>) -> Void) -> CoreStoreObjectKeyValueObservation {
|
public func observe(options: NSKeyValueObservingOptions = [], changeHandler: @escaping (O, CoreStoreObjectObjectDiff<D>) -> Void) -> CoreStoreObjectKeyValueObservation {
|
||||||
|
|
||||||
let result = _CoreStoreObjectKeyValueObservation(
|
let result = _CoreStoreObjectKeyValueObservation(
|
||||||
@@ -120,6 +150,12 @@ extension RelationshipContainer.ToOne {
|
|||||||
|
|
||||||
extension RelationshipContainer.ToManyUnordered {
|
extension RelationshipContainer.ToManyUnordered {
|
||||||
|
|
||||||
|
/**
|
||||||
|
Observes changes in the receiver value. When the returned `CoreStoreObjectKeyValueObservation` is deinited or invalidated, it will stop observing.
|
||||||
|
|
||||||
|
- parameter options: The flags indicating which values to include in the change dictionary.
|
||||||
|
- parameter: changeHandler: The closure called when the value is updated.
|
||||||
|
*/
|
||||||
public func observe(options: NSKeyValueObservingOptions = [], changeHandler: @escaping (O, CoreStoreObjectUnorderedDiff<D>) -> Void) -> CoreStoreObjectKeyValueObservation {
|
public func observe(options: NSKeyValueObservingOptions = [], changeHandler: @escaping (O, CoreStoreObjectUnorderedDiff<D>) -> Void) -> CoreStoreObjectKeyValueObservation {
|
||||||
|
|
||||||
let result = _CoreStoreObjectKeyValueObservation(
|
let result = _CoreStoreObjectKeyValueObservation(
|
||||||
@@ -149,6 +185,12 @@ extension RelationshipContainer.ToManyUnordered {
|
|||||||
|
|
||||||
extension RelationshipContainer.ToManyOrdered {
|
extension RelationshipContainer.ToManyOrdered {
|
||||||
|
|
||||||
|
/**
|
||||||
|
Observes changes in the receiver value. When the returned `CoreStoreObjectKeyValueObservation` is deinited or invalidated, it will stop observing.
|
||||||
|
|
||||||
|
- parameter options: The flags indicating which values to include in the change dictionary.
|
||||||
|
- parameter: changeHandler: The closure called when the value is updated.
|
||||||
|
*/
|
||||||
public func observe(options: NSKeyValueObservingOptions = [], changeHandler: @escaping (O, CoreStoreObjectOrderedDiff<D>) -> Void) -> CoreStoreObjectKeyValueObservation {
|
public func observe(options: NSKeyValueObservingOptions = [], changeHandler: @escaping (O, CoreStoreObjectOrderedDiff<D>) -> Void) -> CoreStoreObjectKeyValueObservation {
|
||||||
|
|
||||||
let result = _CoreStoreObjectKeyValueObservation(
|
let result = _CoreStoreObjectKeyValueObservation(
|
||||||
@@ -177,6 +219,9 @@ extension RelationshipContainer.ToManyOrdered {
|
|||||||
|
|
||||||
// MARK: - CoreStoreObjectValueDiff
|
// MARK: - CoreStoreObjectValueDiff
|
||||||
|
|
||||||
|
/**
|
||||||
|
The object containing the changeset for an observed `ValueContainer.Required` and `ValueContainer.Optional` property.
|
||||||
|
*/
|
||||||
public final class CoreStoreObjectValueDiff<V: ImportableAttributeType> {
|
public final class CoreStoreObjectValueDiff<V: ImportableAttributeType> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -185,12 +230,12 @@ public final class CoreStoreObjectValueDiff<V: ImportableAttributeType> {
|
|||||||
public let kind: NSKeyValueChange
|
public let kind: NSKeyValueChange
|
||||||
|
|
||||||
/**
|
/**
|
||||||
`newValue` and `oldValue` will only be non-nil if `.new`/`.old` is passed to `observe()`. In general, get the most up to date value by accessing it directly on the observed object instead.
|
`newValue` and `oldValue` will only be non-nil if `.new`/`.old` is passed to `observe()`. `newValue` will be `nil` if `isPrior` is `true`.
|
||||||
*/
|
*/
|
||||||
public private(set) lazy var newValue: V? = self.newNativeValue.flatMap(V.cs_fromQueryableNativeType)
|
public private(set) lazy var newValue: V? = self.newNativeValue.flatMap(V.cs_fromQueryableNativeType)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
`newValue` and `oldValue` will only be non-nil if `.new`/`.old` is passed to `observe()`. In general, get the most up to date value by accessing it directly on the observed object instead.
|
`newValue` and `oldValue` will only be non-nil if `.new`/`.old` is passed to `observe()`.
|
||||||
*/
|
*/
|
||||||
public private(set) lazy var oldValue: V? = self.oldNativeValue.flatMap(V.cs_fromQueryableNativeType)
|
public private(set) lazy var oldValue: V? = self.oldNativeValue.flatMap(V.cs_fromQueryableNativeType)
|
||||||
|
|
||||||
@@ -220,6 +265,9 @@ public final class CoreStoreObjectValueDiff<V: ImportableAttributeType> {
|
|||||||
|
|
||||||
// MARK: - CoreStoreObjectValueDiff
|
// MARK: - CoreStoreObjectValueDiff
|
||||||
|
|
||||||
|
/**
|
||||||
|
The object containing the changeset for an observed `TransformableContainer.Required` or `TransformableContainer.Optional` property.
|
||||||
|
*/
|
||||||
public final class CoreStoreObjectTransformableDiff<V: NSCoding & NSCopying> {
|
public final class CoreStoreObjectTransformableDiff<V: NSCoding & NSCopying> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -257,6 +305,9 @@ public final class CoreStoreObjectTransformableDiff<V: NSCoding & NSCopying> {
|
|||||||
|
|
||||||
// MARK: - CoreStoreObjectObjectDiff
|
// MARK: - CoreStoreObjectObjectDiff
|
||||||
|
|
||||||
|
/**
|
||||||
|
The object containing the changeset for an observed `RelationshipContainer.ToOne` property.
|
||||||
|
*/
|
||||||
public final class CoreStoreObjectObjectDiff<D: CoreStoreObject> {
|
public final class CoreStoreObjectObjectDiff<D: CoreStoreObject> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -300,6 +351,9 @@ public final class CoreStoreObjectObjectDiff<D: CoreStoreObject> {
|
|||||||
|
|
||||||
// MARK: - CoreStoreObjectUnorderedDiff
|
// MARK: - CoreStoreObjectUnorderedDiff
|
||||||
|
|
||||||
|
/**
|
||||||
|
The object containing the changeset for an observed `RelationshipContainer.ToManyUnordered` property.
|
||||||
|
*/
|
||||||
public final class CoreStoreObjectUnorderedDiff<D: CoreStoreObject> {
|
public final class CoreStoreObjectUnorderedDiff<D: CoreStoreObject> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -343,6 +397,9 @@ public final class CoreStoreObjectUnorderedDiff<D: CoreStoreObject> {
|
|||||||
|
|
||||||
// MARK: - CoreStoreObjectOrderedDiff
|
// MARK: - CoreStoreObjectOrderedDiff
|
||||||
|
|
||||||
|
/**
|
||||||
|
The object containing the changeset for an observed `RelationshipContainer.Ordered` property.
|
||||||
|
*/
|
||||||
public final class CoreStoreObjectOrderedDiff<D: CoreStoreObject> {
|
public final class CoreStoreObjectOrderedDiff<D: CoreStoreObject> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -451,6 +508,7 @@ fileprivate final class _CoreStoreObjectKeyValueObservation: NSObject, CoreStore
|
|||||||
|
|
||||||
// MARK: FilePrivate
|
// MARK: FilePrivate
|
||||||
|
|
||||||
|
@nonobjc
|
||||||
fileprivate init(object: CoreStoreManagedObject, keyPath: KeyPathString, callback: @escaping (_ object: CoreStoreManagedObject, _ kind: NSKeyValueChange, _ newValue: Any?, _ oldValue: Any?, _ indexes: IndexSet?, _ isPrior: Bool) -> Void) {
|
fileprivate init(object: CoreStoreManagedObject, keyPath: KeyPathString, callback: @escaping (_ object: CoreStoreManagedObject, _ kind: NSKeyValueChange, _ newValue: Any?, _ oldValue: Any?, _ indexes: IndexSet?, _ isPrior: Bool) -> Void) {
|
||||||
|
|
||||||
let _ = _CoreStoreObjectKeyValueObservation.swizzler
|
let _ = _CoreStoreObjectKeyValueObservation.swizzler
|
||||||
@@ -459,6 +517,7 @@ fileprivate final class _CoreStoreObjectKeyValueObservation: NSObject, CoreStore
|
|||||||
self.callback = callback
|
self.callback = callback
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@nonobjc
|
||||||
fileprivate func start(_ options: NSKeyValueObservingOptions) {
|
fileprivate func start(_ options: NSKeyValueObservingOptions) {
|
||||||
|
|
||||||
self.object?.addObserver(self, forKeyPath: self.keyPath, options: options, context: nil)
|
self.object?.addObserver(self, forKeyPath: self.keyPath, options: options, context: nil)
|
||||||
@@ -472,6 +531,7 @@ fileprivate final class _CoreStoreObjectKeyValueObservation: NSObject, CoreStore
|
|||||||
|
|
||||||
// MARK: DynamicObjectKeyValueObservation
|
// MARK: DynamicObjectKeyValueObservation
|
||||||
|
|
||||||
|
@nonobjc
|
||||||
public func invalidate() {
|
public func invalidate() {
|
||||||
|
|
||||||
self.object?.removeObserver(self, forKeyPath: self.keyPath, context: nil)
|
self.object?.removeObserver(self, forKeyPath: self.keyPath, context: nil)
|
||||||
@@ -482,7 +542,8 @@ fileprivate final class _CoreStoreObjectKeyValueObservation: NSObject, CoreStore
|
|||||||
// MARK: Private
|
// MARK: Private
|
||||||
|
|
||||||
// workaround for <rdar://problem/31640524> Erroneous (?) error when using bridging in the Foundation overlay
|
// workaround for <rdar://problem/31640524> Erroneous (?) error when using bridging in the Foundation overlay
|
||||||
@nonobjc static var swizzler: Any? = cs_lazy {
|
@nonobjc
|
||||||
|
static var swizzler: Any? = cs_lazy {
|
||||||
|
|
||||||
let bridgeClass: AnyClass = _CoreStoreObjectKeyValueObservation.self
|
let bridgeClass: AnyClass = _CoreStoreObjectKeyValueObservation.self
|
||||||
let rootObserveImpl = class_getInstanceMethod(
|
let rootObserveImpl = class_getInstanceMethod(
|
||||||
@@ -497,11 +558,17 @@ fileprivate final class _CoreStoreObjectKeyValueObservation: NSObject, CoreStore
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@nonobjc private weak var object: CoreStoreManagedObject?
|
@nonobjc
|
||||||
@nonobjc private let callback: (_ object: CoreStoreManagedObject, _ kind: NSKeyValueChange, _ newValue: Any?, _ oldValue: Any?, _ indexes: IndexSet?, _ isPrior: Bool) -> Void
|
private weak var object: CoreStoreManagedObject?
|
||||||
@nonobjc private let keyPath: KeyPathString
|
|
||||||
|
|
||||||
@objc private dynamic func _cs_swizzle_me_observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSString: Any]?, context: UnsafeMutableRawPointer?) {
|
@nonobjc
|
||||||
|
private let callback: (_ object: CoreStoreManagedObject, _ kind: NSKeyValueChange, _ newValue: Any?, _ oldValue: Any?, _ indexes: IndexSet?, _ isPrior: Bool) -> Void
|
||||||
|
|
||||||
|
@nonobjc
|
||||||
|
private let keyPath: KeyPathString
|
||||||
|
|
||||||
|
@objc
|
||||||
|
private dynamic func _cs_swizzle_me_observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSString: Any]?, context: UnsafeMutableRawPointer?) {
|
||||||
|
|
||||||
guard
|
guard
|
||||||
let object = object as? CoreStoreManagedObject,
|
let object = object as? CoreStoreManagedObject,
|
||||||
|
|||||||
@@ -86,10 +86,6 @@ internal final class FetchedResultsControllerDelegate: NSObject, NSFetchedResult
|
|||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
self.deletedSections = []
|
|
||||||
self.insertedSections = []
|
|
||||||
|
|
||||||
self.handler?.controllerWillChangeContent(controller)
|
self.handler?.controllerWillChangeContent(controller)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -104,7 +100,6 @@ internal final class FetchedResultsControllerDelegate: NSObject, NSFetchedResult
|
|||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
self.handler?.controllerDidChangeContent(controller)
|
self.handler?.controllerDidChangeContent(controller)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -115,98 +110,11 @@ internal final class FetchedResultsControllerDelegate: NSObject, NSFetchedResult
|
|||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
guard var actualType = NSFetchedResultsChangeType(rawValue: type.rawValue) else {
|
|
||||||
|
|
||||||
// This fix is for a bug where iOS passes 0 for NSFetchedResultsChangeType, but this is not a valid enum case.
|
|
||||||
// Swift will then always execute the first case of the switch causing strange behaviour.
|
|
||||||
// https://forums.developer.apple.com/thread/12184#31850
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// This whole dance is a workaround for a nasty bug introduced in XCode 7 targeted at iOS 8 devices
|
|
||||||
// http://stackoverflow.com/questions/31383760/ios-9-attempt-to-delete-and-reload-the-same-index-path/31384014#31384014
|
|
||||||
// https://forums.developer.apple.com/message/9998#9998
|
|
||||||
// https://forums.developer.apple.com/message/31849#31849
|
|
||||||
|
|
||||||
if #available(iOS 10.0, tvOS 10.0, watchOS 3.0, *) {
|
|
||||||
|
|
||||||
// I don't know if iOS 10 even attempted to fix this mess...
|
|
||||||
if case .update = actualType,
|
|
||||||
indexPath != nil,
|
|
||||||
newIndexPath != nil {
|
|
||||||
|
|
||||||
actualType = .move
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
switch actualType {
|
|
||||||
|
|
||||||
case .update:
|
|
||||||
guard let section = indexPath?[0] else {
|
|
||||||
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if self.deletedSections.contains(section)
|
|
||||||
|| self.insertedSections.contains(section) {
|
|
||||||
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
case .move:
|
|
||||||
guard let indexPath = indexPath, let newIndexPath = newIndexPath else {
|
|
||||||
|
|
||||||
return
|
|
||||||
}
|
|
||||||
guard indexPath == newIndexPath else {
|
|
||||||
|
|
||||||
break
|
|
||||||
}
|
|
||||||
if self.insertedSections.contains(indexPath[0]) {
|
|
||||||
|
|
||||||
// Observers that handle the .Move change are advised to delete then reinsert the object instead of just moving. This is especially true when indexPath and newIndexPath are equal. For example, calling tableView.moveRowAtIndexPath(_:toIndexPath) when both indexPaths are the same will crash the tableView.
|
|
||||||
self.handler?.controller(
|
|
||||||
controller,
|
|
||||||
didChangeObject: anObject,
|
|
||||||
atIndexPath: indexPath,
|
|
||||||
forChangeType: .move,
|
|
||||||
newIndexPath: newIndexPath
|
|
||||||
)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if self.deletedSections.contains(indexPath[0]) {
|
|
||||||
|
|
||||||
self.handler?.controller(
|
|
||||||
controller,
|
|
||||||
didChangeObject: anObject,
|
|
||||||
atIndexPath: nil,
|
|
||||||
forChangeType: .insert,
|
|
||||||
newIndexPath: indexPath
|
|
||||||
)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
guard #available(iOS 9.0, tvOS 9.0, watchOS 3.0, *) else {
|
|
||||||
|
|
||||||
return
|
|
||||||
}
|
|
||||||
self.handler?.controller(
|
|
||||||
controller,
|
|
||||||
didChangeObject: anObject,
|
|
||||||
atIndexPath: indexPath,
|
|
||||||
forChangeType: .update,
|
|
||||||
newIndexPath: nil
|
|
||||||
)
|
|
||||||
return
|
|
||||||
|
|
||||||
default:
|
|
||||||
break
|
|
||||||
}
|
|
||||||
|
|
||||||
self.handler?.controller(
|
self.handler?.controller(
|
||||||
controller,
|
controller,
|
||||||
didChangeObject: anObject,
|
didChangeObject: anObject,
|
||||||
atIndexPath: indexPath,
|
atIndexPath: indexPath,
|
||||||
forChangeType: actualType,
|
forChangeType: type,
|
||||||
newIndexPath: newIndexPath
|
newIndexPath: newIndexPath
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -218,14 +126,6 @@ internal final class FetchedResultsControllerDelegate: NSObject, NSFetchedResult
|
|||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
switch type {
|
|
||||||
|
|
||||||
case .delete: self.deletedSections.insert(sectionIndex)
|
|
||||||
case .insert: self.insertedSections.insert(sectionIndex)
|
|
||||||
default: break
|
|
||||||
}
|
|
||||||
|
|
||||||
self.handler?.controller(
|
self.handler?.controller(
|
||||||
controller,
|
controller,
|
||||||
didChangeSection: sectionInfo,
|
didChangeSection: sectionInfo,
|
||||||
@@ -242,13 +142,4 @@ internal final class FetchedResultsControllerDelegate: NSObject, NSFetchedResult
|
|||||||
sectionIndexTitleForSectionName: sectionName
|
sectionIndexTitleForSectionName: sectionName
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// MARK: Private
|
|
||||||
|
|
||||||
@nonobjc
|
|
||||||
private var deletedSections = Set<Int>()
|
|
||||||
|
|
||||||
@nonobjc
|
|
||||||
private var insertedSections = Set<Int>()
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user