Skip to content
This repository was archived by the owner on Feb 8, 2023. It is now read-only.

Commit 2fbbccd

Browse files
committed
Merge pull request #28 from tomlokhorst/feature/fixes
Feature/fixes
2 parents dbaeeec + 7f14137 commit 2fbbccd

File tree

7 files changed

+49
-49
lines changed

7 files changed

+49
-49
lines changed

CoreDataKit.podspec

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Pod::Spec.new do |s|
22
s.name = "CoreDataKit"
3-
s.version = "0.7.0"
3+
s.version = "0.8.0"
44
s.license = "MIT"
55

66
s.summary = "CoreDataKit makes common operations on objects and importing into CoreData a breeze."

CoreDataKit/ManagedObjectObserver.swift

+3-7
Original file line numberDiff line numberDiff line change
@@ -43,14 +43,10 @@ public class ManagedObjectObserver<T:NSManagedObject>: NSObject {
4343
- parameter observeObject: Object to observe
4444
- parameter inContext: Context to observe the object in
4545
*/
46-
public init(observeObject _observedObject: T, inContext context: NSManagedObjectContext) {
46+
public init(observeObject originalObserveObject: T, inContext context: NSManagedObjectContext) {
4747
// Try to convert the observee to the given context, may fail because it's not yet saved
48-
do {
49-
self.observedObject = try context.find(T.self, managedObjectID: _observedObject.objectID)
50-
}
51-
catch {
52-
self.observedObject = _observedObject
53-
}
48+
let observeObject = try? context.find(T.self, managedObjectID: originalObserveObject.objectID)
49+
self.observedObject = observeObject ?? originalObserveObject
5450

5551
self.context = context
5652
self.subscribers = [Subscriber]()

CoreDataKit/NSManagedObjectContext.swift

+1-6
Original file line numberDiff line numberDiff line change
@@ -326,12 +326,7 @@ extension NSManagedObjectContext
326326
}
327327

328328
if let error = error {
329-
if let error = error as? NSError {
330-
throw CoreDataKitError.CoreDataError(error)
331-
}
332-
else {
333-
throw error
334-
}
329+
throw CoreDataKitError.CoreDataError(error)
335330
}
336331

337332
return resultsController

CoreDataKit/Types.swift

+3-3
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public typealias PerformBlockCompletionHandler = (arg: () throws -> CommitAction
5454
/// All errors that can occure from CoreDataKit
5555

5656
public enum CoreDataKitError : ErrorType {
57-
case CoreDataError(NSError)
57+
case CoreDataError(ErrorType)
5858

5959
case ImportCancelled(entityName: String)
6060
case ImportError(description: String)
@@ -68,7 +68,7 @@ extension CoreDataKitError : CustomStringConvertible {
6868
public var description: String {
6969
switch self {
7070
case .CoreDataError(let error):
71-
return "CoreDataError: \(error.localizedDescription)"
71+
return "CoreDataError: \(error)"
7272
case .ImportCancelled(let entityName):
7373
return "Import of entity \(entityName) cancelled"
7474
case .ContextError(let description):
@@ -106,7 +106,7 @@ extension CoreDataKitError {
106106
public var nsError: NSError {
107107
switch self {
108108
case .CoreDataError(let error):
109-
return error
109+
return error as NSError
110110
default:
111111
return NSError(
112112
domain: CoreDataKitErrorDomain,

CoreDataKitTests/Fixtures/Model.xcdatamodeld/Model.xcdatamodel/contents

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
2-
<model userDefinedModelVersionIdentifier="" type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="6252" systemVersion="14B25" minimumToolsVersion="Xcode 4.3" macOSVersion="Automatic" iOSVersion="Automatic">
2+
<model userDefinedModelVersionIdentifier="" type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="8193.2" systemVersion="14F27" minimumToolsVersion="Xcode 4.3">
33
<entity name="Car" representedClassName="CoreDataKitTests.Car" syncable="YES">
44
<attribute name="color" attributeType="String" syncable="YES"/>
55
<attribute name="name" optional="YES" attributeType="String" syncable="YES">
@@ -32,7 +32,7 @@
3232
<entry key="CDKId" value="name"/>
3333
</userInfo>
3434
</entity>
35-
<entity name="EmployeeWithRelationEmbedding" representedClassName="CoreDataKitTests.EmployeeWithRelationWithouId" syncable="YES">
35+
<entity name="EmployeeWithRelationEmbedding" representedClassName="CoreDataKitTests.EmployeeWithRelationEmbedding" syncable="YES">
3636
<attribute name="name" attributeType="String" syncable="YES"/>
3737
<relationship name="salary" maxCount="1" deletionRule="Cascade" destinationEntity="Salary" inverseName="employee" inverseEntity="Salary" syncable="YES">
3838
<userInfo>
@@ -65,8 +65,8 @@
6565
<element name="Car" positionX="-36" positionY="18" width="128" height="105"/>
6666
<element name="Employee" positionX="-63" positionY="-18" width="128" height="60"/>
6767
<element name="EmployeeImportable" positionX="-63" positionY="-9" width="128" height="90"/>
68+
<element name="EmployeeWithRelationEmbedding" positionX="160" positionY="192" width="128" height="75"/>
6869
<element name="EmployeeWithRelations" positionX="-54" positionY="9" width="128" height="88"/>
69-
<element name="EmployeeWithRelationEmbedding" positionX="160" positionY="192" width="128" height="73"/>
7070
<element name="Salary" positionX="-36" positionY="36" width="128" height="75"/>
7171
</elements>
7272
</model>

CoreDataKitTests/NSManagedObjectContextTests.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ class NSManagedObjectContextTests: TestCase {
8181
XCTFail("Expected error")
8282
}
8383
catch CoreDataKitError.CoreDataError(let error) {
84-
XCTAssertEqual(error.code, 1570, "Incorrect error code")
84+
XCTAssertEqual((error as NSError).code, 1570, "Incorrect error code")
8585
XCTAssertEqual(self.coreDataStack.rootContext.countForFetchRequest(countFRq, error: nil), 0, "Unexpected employee entities")
8686
completionExpectation.fulfill()
8787
}

README.md

+37-28
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ source 'https://github.com/CocoaPods/Specs.git'
1313
platform :ios, '8.0'
1414
use_frameworks!
1515

16-
pod 'CoreDataKit', '~> 0.6'
16+
pod 'CoreDataKit', '~> 0.8'
1717
```
1818

1919
## Usage
@@ -33,32 +33,35 @@ For CoreDataKit to be able to use your NSManagedObject subclass, such as Car in
3333
```swift
3434
class Car: NSManagedObject, NamedManagedObject {
3535

36-
static var entityName = "Car" //corresponding to your Enity name in your xcdatamodeld
36+
static var entityName = "Car" // corresponding to your Entity name in your xcdatamodeld
3737

3838
@NSManaged var color: String
3939
@NSManaged var model: String
40-
4140
}
4241

4342
```
4443

4544
From here you are able to use the shared stack. For example to create and save an entity, this example performs a block an a background context, saves it to the persistent store and executes a completion handler:
4645
```swift
4746
CDK.performBlockOnBackgroundContext({ context in
48-
if let car = context.create(Car.self).value() {
49-
car.color = "Hammerhead Silver"
50-
car.model = "Aston Martin DB9"
51-
}
52-
53-
return .SaveToPersistentStore
54-
}, completionHandler: { result, _ in
55-
switch result {
56-
case .Success:
57-
println("Car saved, time to update the interface!")
58-
59-
case let .Failure(error):
60-
println("Saving Harvey Specters car failed with error: \(error)")
61-
}
47+
do {
48+
let car = try context.create(Car.self)
49+
car.color = "Hammerhead Silver"
50+
car.model = "Aston Martin DB9"
51+
52+
return .SaveToPersistentStore
53+
}
54+
catch {
55+
return .DoNothing
56+
}
57+
}, completionHandler: { result in
58+
do {
59+
try result()
60+
print("Car saved, time to update the interface!")
61+
}
62+
catch {
63+
print("Saving Harvey Specters car failed with error: \(error)")
64+
}
6265
})
6366
```
6467

@@ -67,19 +70,25 @@ CDK.performBlockOnBackgroundContext({ context in
6770
If you prefer using promises, instead of the callback style of this library, you can use the [Promissum](https://github.com/tomlokhorst/Promissum) library with CoreDataKit. Using the [CoreDataKit+Promise](https://github.com/tomlokhorst/Promissum/blob/develop/extensions/PromissumExtensions/CoreDataKit%2BPromise.swift) extension, the example from above can be rewritten as such:
6871
```swift
6972
let createPromise = CDK.performBlockOnBackgroundContextPromise { context in
70-
if let car = context.create(Car.self).value() {
71-
car.color = "Hammerhead Silver"
72-
car.model = "Aston Martin DB9"
73-
}
74-
75-
return .SaveToPersistentStore
73+
do {
74+
let car = try context.create(Car.self)
75+
car.color = "Hammerhead Silver"
76+
car.model = "Aston Martin DB9"
77+
78+
return .SaveToPersistentStore
79+
}
80+
catch {
81+
return .DoNothing
82+
}
7683
}
7784

78-
createPromise.then { _ in
79-
println("Car saved, time to update the interface!")
80-
}.catch { error in
81-
println("Saving Harvey Specters car failed with error: \(error)")
82-
}
85+
createPromise
86+
.then { _ in
87+
print("Car saved, time to update the interface!")
88+
}
89+
.trap { error in
90+
print("Saving Harvey Specters car failed with error: \(error)")
91+
}
8392
```
8493

8594
## Contributing

0 commit comments

Comments
 (0)