Skip to content

Commit 287f4ed

Browse files
authored
Merge pull request #2 from ffried/develop
Eliminate last ObjC Code
2 parents ce3a722 + d0655c3 commit 287f4ed

20 files changed

+159
-1555
lines changed

FFCoreData/FFCoreData Tests/FFCoreDataTests.swift

Lines changed: 33 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -44,44 +44,59 @@ class FFCoreDataTests: XCTestCase {
4444
super.tearDown()
4545
}
4646

47+
private func createTempObjects(amount count: Int, in context: NSManagedObjectContext) throws {
48+
for _ in 0..<count {
49+
_ = try TestEntity.findOrCreate(in: context, by: ["uuid": UUID().uuidString])
50+
}
51+
}
52+
4753
func testContextCreation() {
4854
// This is an example of a functional test case.
4955
// Use XCTAssert and related functions to verify your tests produce the correct results.
5056
XCTAssertNotNil(context, "Main context shouldn't be nil!")
5157
}
5258

5359
func testObjectCreation() {
54-
let obj = TestEntity.createObject(in: context)
55-
obj.uuid = UUID().uuidString
56-
XCTAssertNotNil(obj, "Created object must not be nil!")
57-
context.delete(obj)
60+
do {
61+
let obj = try TestEntity.create(in: context)
62+
obj.uuid = UUID().uuidString
63+
XCTAssertNotNil(obj)
64+
context.delete(obj)
65+
} catch {
66+
XCTFail("Threw error: \(error)")
67+
}
5868
}
5969

60-
func testSearchObject() {
70+
func testObjectCreationWithDictionary() {
6171
do {
62-
let obj = try TestEntity.findOrCreateObject(byKeyObjectDictionary: ["uuid": testUUID], in: context)
63-
XCTAssertEqual(obj.uuid, testUUID, "UUIDs of found or created object and search params must be the same!")
72+
let uuid = UUID().uuidString
73+
let dict: KeyObjectDictionary = ["uuid": uuid]
74+
let obj = try TestEntity.create(in: context, applying: dict)
75+
XCTAssertEqual(obj.uuid, uuid)
6476
context.delete(obj)
6577
} catch {
66-
XCTFail("Find or create must not fail: \(error)")
78+
XCTFail("Threw error: \(error)")
6779
}
6880
}
6981

70-
private func createTempObjects(amount count: Int, in context: NSManagedObjectContext) throws {
71-
for _ in 0..<count {
72-
let uuid = UUID().uuidString
73-
try TestEntity.findOrCreateObject(byKeyObjectDictionary: ["uuid": uuid], in: context)
82+
func testSearchObject() {
83+
do {
84+
let obj = try TestEntity.findOrCreate(in: context, by: ["uuid": testUUID])
85+
XCTAssertEqual(obj.uuid, testUUID, "UUIDs of found or created object and search params must be the same!")
86+
context.delete(obj)
87+
} catch {
88+
XCTFail("Find or create must not fail: \(error)")
7489
}
7590
}
7691

7792
func testSearchObjects() {
7893
do {
7994
let count = 100
8095
try createTempObjects(amount: count, in: context)
81-
let objects = try TestEntity.allObjects(in: context) as? [TestEntity]
96+
let objects = try TestEntity.all(in: context)
8297
XCTAssertNotNil(objects, "Found objects must not be nil!")
83-
XCTAssertGreaterThanOrEqual(objects!.count, count, "Count of found objects must be greater than or equal to the created objects")
84-
objects?.forEach(context.delete)
98+
XCTAssertGreaterThanOrEqual(objects.count, count, "Count of found objects must be greater than or equal to the created objects")
99+
objects.forEach(context.delete)
85100
} catch {
86101
XCTFail("Find must not fail: \(error)")
87102
}
@@ -94,10 +109,10 @@ class FFCoreDataTests: XCTestCase {
94109
let count = 100
95110
try createTempObjects(amount: count, in: tempCtx)
96111
CoreDataStack.save(context: tempCtx)
97-
let objects = try TestEntity.allObjects(in: context) as? [TestEntity]
112+
let objects = try TestEntity.all(in: context)
98113
XCTAssertNotNil(objects, "Found objects must not be nil!")
99-
XCTAssertGreaterThanOrEqual(objects!.count, count, "Count of found objects must be greater than or equal to the created objects")
100-
objects?.forEach(mainCtx.delete)
114+
XCTAssertGreaterThanOrEqual(objects.count, count, "Count of found objects must be greater than or equal to the created objects")
115+
objects.forEach(mainCtx.delete)
101116
CoreDataStack.save(context: tempCtx)
102117
} catch {
103118
XCTFail("Find must not fail: \(error)")

FFCoreData/FFCoreData Tests/TestEntity.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,10 @@
2020

2121
import Foundation
2222
import CoreData
23+
import FFCoreData
2324

2425
//@objc(TestEntity)
25-
public class TestEntity: NSManagedObject {
26+
public final class TestEntity: NSManagedObject, FindOrCreatable {
2627

2728
// Insert code here to add functionality to your managed object subclass
2829

FFCoreData/FFCoreData.xcodeproj/project.pbxproj

Lines changed: 11 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -17,23 +17,14 @@
1717
071408631E7FFD51004318C9 /* TableViewFetchedResultsControllerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07A64BEA1B2C266A0008EFF2 /* TableViewFetchedResultsControllerDelegate.swift */; };
1818
071408641E7FFD51004318C9 /* CollectionViewFetchedResultsControllerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07A64BEC1B2C29A30008EFF2 /* CollectionViewFetchedResultsControllerDelegate.swift */; };
1919
071408651E7FFD58004318C9 /* FetchedResulsControllerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07AA24391B2A0F0900FA689B /* FetchedResulsControllerDelegate.swift */; };
20-
071408661E7FFD83004318C9 /* NSManagedObject+FFFindAndOrCreateTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 073518C11CFC3267001C05AA /* NSManagedObject+FFFindAndOrCreateTypes.h */; settings = {ATTRIBUTES = (Public, ); }; };
21-
071408671E7FFD89004318C9 /* NSManagedObject+FFEntity.h in Headers */ = {isa = PBXBuildFile; fileRef = 073518CC1CFC5866001C05AA /* NSManagedObject+FFEntity.h */; settings = {ATTRIBUTES = (Public, ); }; };
22-
071408681E7FFD92004318C9 /* NSManagedObject+FFEntity.m in Sources */ = {isa = PBXBuildFile; fileRef = 073518CD1CFC5866001C05AA /* NSManagedObject+FFEntity.m */; };
23-
071408691E7FFD92004318C9 /* NSManagedObject+FFCreate.m in Sources */ = {isa = PBXBuildFile; fileRef = 073518D31CFC5A8F001C05AA /* NSManagedObject+FFCreate.m */; };
24-
0714086A1E7FFD92004318C9 /* NSManagedObject+FFFind.m in Sources */ = {isa = PBXBuildFile; fileRef = 073518C71CFC57FA001C05AA /* NSManagedObject+FFFind.m */; };
25-
0714086B1E7FFD92004318C9 /* NSManagedObject+FFFindOrCreate.m in Sources */ = {isa = PBXBuildFile; fileRef = 07300CB31BD3F51C00C1644E /* NSManagedObject+FFFindOrCreate.m */; };
26-
0714086C1E7FFD92004318C9 /* NSManagedObject+FFFindAndOrCreate_ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 073518B91CFC3105001C05AA /* NSManagedObject+FFFindAndOrCreate_ObjC.m */; };
27-
0714086D1E7FFD9F004318C9 /* NSManagedObject+FFCreate.h in Headers */ = {isa = PBXBuildFile; fileRef = 073518D21CFC5A8F001C05AA /* NSManagedObject+FFCreate.h */; settings = {ATTRIBUTES = (Public, ); }; };
28-
0714086E1E7FFD9F004318C9 /* NSManagedObject+FFFind.h in Headers */ = {isa = PBXBuildFile; fileRef = 073518C61CFC57FA001C05AA /* NSManagedObject+FFFind.h */; settings = {ATTRIBUTES = (Public, ); }; };
29-
0714086F1E7FFD9F004318C9 /* NSManagedObject+FFFindOrCreate.h in Headers */ = {isa = PBXBuildFile; fileRef = 07300CB21BD3F51C00C1644E /* NSManagedObject+FFFindOrCreate.h */; settings = {ATTRIBUTES = (Public, ); }; };
30-
071408701E7FFD9F004318C9 /* NSManagedObject+FFFindAndOrCreate_ObjC.h in Headers */ = {isa = PBXBuildFile; fileRef = 073518B81CFC3105001C05AA /* NSManagedObject+FFFindAndOrCreate_ObjC.h */; settings = {ATTRIBUTES = (Public, ); }; };
3120
071408711E7FFDAE004318C9 /* CoreDataManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07AA24371B28037E00FA689B /* CoreDataManager.swift */; };
3221
071408721E7FFDD8004318C9 /* FFCoreDataTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07F82FDC1DAA7ADA00DBCBAA /* FFCoreDataTests.swift */; };
3322
071408731E7FFDDE004318C9 /* TestEntity+CoreDataProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07F82FDD1DAA7ADA00DBCBAA /* TestEntity+CoreDataProperties.swift */; };
3423
071408741E7FFDE0004318C9 /* TestEntity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07F82FDE1DAA7ADA00DBCBAA /* TestEntity.swift */; };
3524
071408751E7FFDE4004318C9 /* TestModel.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 07F82FDF1DAA7ADA00DBCBAA /* TestModel.xcdatamodeld */; };
3625
071408771E8001C1004318C9 /* FFCoreData.h in Headers */ = {isa = PBXBuildFile; fileRef = 07876A1B19D41E7000F21E7D /* FFCoreData.h */; settings = {ATTRIBUTES = (Public, ); }; };
26+
077811501EC5D61E001CB263 /* FFFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0714083C1E7FF3FE004318C9 /* FFFoundation.framework */; };
27+
0788305D1E824C2A00A0F103 /* NSManagedObject+FindAndOrCreate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07A64BF21B2C53480008EFF2 /* NSManagedObject+FindAndOrCreate.swift */; };
3728
/* End PBXBuildFile section */
3829

3930
/* Begin PBXContainerItemProxy section */
@@ -66,17 +57,6 @@
6657
071408461E7FF504004318C9 /* FFCoreData.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FFCoreData.framework; sourceTree = BUILT_PRODUCTS_DIR; };
6758
0714084E1E7FF504004318C9 /* FFCoreDataTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FFCoreDataTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
6859
071408761E7FFEC0004318C9 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
69-
07300CB21BD3F51C00C1644E /* NSManagedObject+FFFindOrCreate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSManagedObject+FFFindOrCreate.h"; sourceTree = "<group>"; };
70-
07300CB31BD3F51C00C1644E /* NSManagedObject+FFFindOrCreate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSManagedObject+FFFindOrCreate.m"; sourceTree = "<group>"; };
71-
073518B81CFC3105001C05AA /* NSManagedObject+FFFindAndOrCreate_ObjC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSManagedObject+FFFindAndOrCreate_ObjC.h"; sourceTree = "<group>"; };
72-
073518B91CFC3105001C05AA /* NSManagedObject+FFFindAndOrCreate_ObjC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSManagedObject+FFFindAndOrCreate_ObjC.m"; sourceTree = "<group>"; };
73-
073518C11CFC3267001C05AA /* NSManagedObject+FFFindAndOrCreateTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSManagedObject+FFFindAndOrCreateTypes.h"; sourceTree = "<group>"; };
74-
073518C61CFC57FA001C05AA /* NSManagedObject+FFFind.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSManagedObject+FFFind.h"; sourceTree = "<group>"; };
75-
073518C71CFC57FA001C05AA /* NSManagedObject+FFFind.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSManagedObject+FFFind.m"; sourceTree = "<group>"; };
76-
073518CC1CFC5866001C05AA /* NSManagedObject+FFEntity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSManagedObject+FFEntity.h"; sourceTree = "<group>"; };
77-
073518CD1CFC5866001C05AA /* NSManagedObject+FFEntity.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSManagedObject+FFEntity.m"; sourceTree = "<group>"; };
78-
073518D21CFC5A8F001C05AA /* NSManagedObject+FFCreate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSManagedObject+FFCreate.h"; sourceTree = "<group>"; };
79-
073518D31CFC5A8F001C05AA /* NSManagedObject+FFCreate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSManagedObject+FFCreate.m"; sourceTree = "<group>"; };
8060
076576941A73CC3500EEA793 /* ManagedObjectContextObserver.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ManagedObjectContextObserver.swift; sourceTree = "<group>"; };
8161
076576961A73D4D500EEA793 /* MOCObjectsObserver.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MOCObjectsObserver.swift; sourceTree = "<group>"; };
8262
07876A1B19D41E7000F21E7D /* FFCoreData.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FFCoreData.h; sourceTree = "<group>"; };
@@ -99,6 +79,7 @@
9979
isa = PBXFrameworksBuildPhase;
10080
buildActionMask = 2147483647;
10181
files = (
82+
077811501EC5D61E001CB263 /* FFFoundation.framework in Frameworks */,
10283
);
10384
runOnlyForDeploymentPostprocessing = 0;
10485
};
@@ -213,17 +194,6 @@
213194
isa = PBXGroup;
214195
children = (
215196
07A64BF21B2C53480008EFF2 /* NSManagedObject+FindAndOrCreate.swift */,
216-
073518C11CFC3267001C05AA /* NSManagedObject+FFFindAndOrCreateTypes.h */,
217-
073518CC1CFC5866001C05AA /* NSManagedObject+FFEntity.h */,
218-
073518CD1CFC5866001C05AA /* NSManagedObject+FFEntity.m */,
219-
073518D21CFC5A8F001C05AA /* NSManagedObject+FFCreate.h */,
220-
073518D31CFC5A8F001C05AA /* NSManagedObject+FFCreate.m */,
221-
073518C61CFC57FA001C05AA /* NSManagedObject+FFFind.h */,
222-
073518C71CFC57FA001C05AA /* NSManagedObject+FFFind.m */,
223-
07300CB21BD3F51C00C1644E /* NSManagedObject+FFFindOrCreate.h */,
224-
07300CB31BD3F51C00C1644E /* NSManagedObject+FFFindOrCreate.m */,
225-
073518B81CFC3105001C05AA /* NSManagedObject+FFFindAndOrCreate_ObjC.h */,
226-
073518B91CFC3105001C05AA /* NSManagedObject+FFFindAndOrCreate_ObjC.m */,
227197
);
228198
name = NSManagedObject;
229199
sourceTree = "<group>";
@@ -246,13 +216,7 @@
246216
isa = PBXHeadersBuildPhase;
247217
buildActionMask = 2147483647;
248218
files = (
249-
0714086D1E7FFD9F004318C9 /* NSManagedObject+FFCreate.h in Headers */,
250-
071408661E7FFD83004318C9 /* NSManagedObject+FFFindAndOrCreateTypes.h in Headers */,
251-
0714086E1E7FFD9F004318C9 /* NSManagedObject+FFFind.h in Headers */,
252-
0714086F1E7FFD9F004318C9 /* NSManagedObject+FFFindOrCreate.h in Headers */,
253219
071408771E8001C1004318C9 /* FFCoreData.h in Headers */,
254-
071408701E7FFD9F004318C9 /* NSManagedObject+FFFindAndOrCreate_ObjC.h in Headers */,
255-
071408671E7FFD89004318C9 /* NSManagedObject+FFEntity.h in Headers */,
256220
);
257221
runOnlyForDeploymentPostprocessing = 0;
258222
};
@@ -303,7 +267,7 @@
303267
attributes = {
304268
CLASSPREFIX = FF;
305269
LastSwiftUpdateCheck = 0820;
306-
LastUpgradeCheck = 0810;
270+
LastUpgradeCheck = 0830;
307271
ORGANIZATIONNAME = "Florian Friedrich";
308272
TargetAttributes = {
309273
071408451E7FF504004318C9 = {
@@ -379,19 +343,15 @@
379343
isa = PBXSourcesBuildPhase;
380344
buildActionMask = 2147483647;
381345
files = (
382-
0714086A1E7FFD92004318C9 /* NSManagedObject+FFFind.m in Sources */,
383346
071408631E7FFD51004318C9 /* TableViewFetchedResultsControllerDelegate.swift in Sources */,
384347
071408611E7FFD34004318C9 /* CollectionViewDataSource.swift in Sources */,
385348
071408711E7FFDAE004318C9 /* CoreDataManager.swift in Sources */,
386-
071408681E7FFD92004318C9 /* NSManagedObject+FFEntity.m in Sources */,
387349
071408641E7FFD51004318C9 /* CollectionViewFetchedResultsControllerDelegate.swift in Sources */,
388350
0714085E1E7FFD28004318C9 /* MOCObjectsObserver.swift in Sources */,
389-
0714086B1E7FFD92004318C9 /* NSManagedObject+FFFindOrCreate.m in Sources */,
390351
071408621E7FFD51004318C9 /* UIKitFetchedResultsControllerDelegate.swift in Sources */,
352+
0788305D1E824C2A00A0F103 /* NSManagedObject+FindAndOrCreate.swift in Sources */,
391353
0714085D1E7FFD27004318C9 /* ManagedObjectContextObserver.swift in Sources */,
392-
0714086C1E7FFD92004318C9 /* NSManagedObject+FFFindAndOrCreate_ObjC.m in Sources */,
393354
071408601E7FFD34004318C9 /* TableViewDataSource.swift in Sources */,
394-
071408691E7FFD92004318C9 /* NSManagedObject+FFCreate.m in Sources */,
395355
0714085F1E7FFD28004318C9 /* MOCEntitiesObserver.swift in Sources */,
396356
071408651E7FFD58004318C9 /* FetchedResulsControllerDelegate.swift in Sources */,
397357
);
@@ -422,10 +382,11 @@
422382
071408581E7FF504004318C9 /* Debug */ = {
423383
isa = XCBuildConfiguration;
424384
buildSettings = {
385+
APPLICATION_EXTENSION_API_ONLY = YES;
425386
CLANG_ANALYZER_NONNULL = YES;
426387
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
427388
CODE_SIGN_IDENTITY = "";
428-
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
389+
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
429390
DEBUG_INFORMATION_FORMAT = dwarf;
430391
DEFINES_MODULE = YES;
431392
DYLIB_COMPATIBILITY_VERSION = 1;
@@ -447,10 +408,11 @@
447408
071408591E7FF504004318C9 /* Release */ = {
448409
isa = XCBuildConfiguration;
449410
buildSettings = {
411+
APPLICATION_EXTENSION_API_ONLY = YES;
450412
CLANG_ANALYZER_NONNULL = YES;
451413
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
452414
CODE_SIGN_IDENTITY = "";
453-
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
415+
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
454416
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
455417
DEFINES_MODULE = YES;
456418
DYLIB_COMPATIBILITY_VERSION = 1;
@@ -618,6 +580,7 @@
618580
071408591E7FF504004318C9 /* Release */,
619581
);
620582
defaultConfigurationIsVisible = 0;
583+
defaultConfigurationName = Release;
621584
};
622585
0714085A1E7FF504004318C9 /* Build configuration list for PBXNativeTarget "FFCoreDataTests" */ = {
623586
isa = XCConfigurationList;
@@ -626,6 +589,7 @@
626589
0714085C1E7FF504004318C9 /* Release */,
627590
);
628591
defaultConfigurationIsVisible = 0;
592+
defaultConfigurationName = Release;
629593
};
630594
07876A1019D41E7000F21E7D /* Build configuration list for PBXProject "FFCoreData" */ = {
631595
isa = XCConfigurationList;

FFCoreData/FFCoreData.xcodeproj/xcshareddata/xcschemes/FFCoreData.xcscheme

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Scheme
3-
LastUpgradeVersion = "0820"
3+
LastUpgradeVersion = "0830"
44
version = "1.3">
55
<BuildAction
66
parallelizeBuildables = "YES"

FFCoreData/FFCoreData/FFCoreData.h

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,3 @@ FOUNDATION_EXPORT double FFCoreDataVersionNumber;
2626

2727
//! Project version string for FFCoreData.
2828
FOUNDATION_EXPORT const unsigned char FFCoreDataVersionString[];
29-
30-
#import <FFCoreData/NSManagedObject+FFFindAndOrCreateTypes.h>
31-
#import <FFCoreData/NSManagedObject+FFEntity.h>
32-
#import <FFCoreData/NSManagedObject+FFCreate.h>
33-
#import <FFCoreData/NSManagedObject+FFFind.h>
34-
#import <FFCoreData/NSManagedObject+FFFindOrCreate.h>
35-
36-
#import <FFCoreData/NSManagedObject+FFFindAndOrCreate_ObjC.h>

FFCoreData/FFCoreData/FetchedResulsControllerDelegate.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import class CoreData.NSFetchedResultsController
2828

2929
@objc public protocol FetchedResultsControllerManagerDelegate: NSFetchedResultsControllerDelegate {}
3030

31+
@available(OSX 10.12, *)
3132
public class FetchedResultsControllerManager<Result: NSFetchRequestResult>: NSObject, NSFetchedResultsControllerDelegate {
3233

3334
public typealias Controller = NSFetchedResultsController<Result>

FFCoreData/FFCoreData/MOCEntitiesObserver.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public final class MOCEntitiesObserver: MOCObserver {
3939
}
4040
}
4141

42-
public extension NSManagedObject {
42+
public extension Fetchable where Self: NSManagedObject {
4343
public static func createMOCEntitiesObserver(for contexts: [NSManagedObjectContext]? = nil, fireInitially: Bool = false, block: @escaping MOCObserver.MOCObserverBlock) -> MOCEntitiesObserver {
4444
return MOCEntitiesObserver(entityNames: [entityName], contexts: contexts, fireInitially: fireInitially, block: block)
4545
}

0 commit comments

Comments
 (0)