-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSHDataAdapter.m
More file actions
239 lines (192 loc) · 6.33 KB
/
SHDataAdapter.m
File metadata and controls
239 lines (192 loc) · 6.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
//
// SHDataAdapter.m
// SHDataKit
//
// Created by David Hole on 23/02/12.
// Copyright (c) 2012 Shorthand. All rights reserved.
//
#import "SHDataAdapter.h"
#import "NSManagedObject+SHDataKitAdditions.h"
@implementation SHDataAdapter
+ (id)dataAdapterWithEntityName:(NSString*)entityName inManagedObjectContext:(NSManagedObjectContext*)managedObjectContext
{
return [[[self class] alloc] initWithEntityName:entityName inManagedObjectContext:managedObjectContext];
}
- (id)initWithEntityName:(NSString *)entityName inManagedObjectContext:(NSManagedObjectContext*)managedObjectContext
{
self = [super init];
if (self) {
_entityName = entityName;
[_entityName retain];
_managedObjectContext = managedObjectContext;
[_managedObjectContext retain];
}
return self;
}
- (void)dealloc
{
[_entityName release];
[_managedObjectContext release];
}
- (NSString*)entityName
{
return _entityName;
}
- (NSManagedObjectContext*)managedObjectContext
{
return _managedObjectContext;
}
- (NSEntityDescription*)entityDescription
{
return [NSEntityDescription entityForName:self.entityName inManagedObjectContext:self.managedObjectContext];
}
- (NSFetchRequest*)fetchRequest
{
NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];
[request setEntity:self.entityDescription];
return request;
}
- (id)insert
{
// Insert the new object
return [NSEntityDescription insertNewObjectForEntityForName:self.entityName inManagedObjectContext:self.managedObjectContext];
}
- (id)insertWithValues:(NSDictionary*)values
{
// Insert the new object
NSManagedObject *newObject = [self insert];
// Set its values with the supplied dictionary
[newObject setValuesForKeysWithDictionary:values];
// Return the new object
return newObject;
}
- (NSArray*)fetchAllWithPredicate:(NSPredicate*)predicate sortDescriptors:(NSArray*)sortDescriptors limit:(NSInteger)limit offset:(NSInteger)offset
{
// Initialise the request, set the entity
NSFetchRequest *request = [self fetchRequest];
// Set the predicate if not nil
if (predicate != nil)
{
[request setPredicate:predicate];
}
// Set the sort descriptors if not nil
if (sortDescriptors != nil)
{
[request setSortDescriptors:sortDescriptors];
}
// Set the fetch limit if it is greater than 0
if (limit > 0)
{
[request setFetchLimit:limit];
}
// Set the fetch offset if it is greater than 0
if (offset > 0)
{
[request setFetchOffset:offset];
}
// Grab return the results
return [self fetchAllWithRequest:request];
}
- (NSArray*)fetchAllWithPredicate:(NSPredicate*)predicate sortDescriptors:(NSArray*)sortDescriptors limit:(NSInteger)limit
{
return [self fetchAllWithPredicate:predicate sortDescriptors:sortDescriptors limit:0 offset:0];
}
- (NSArray*)fetchAllWithPredicate:(NSPredicate*)predicate sortDescriptors:(NSArray*)sortDescriptors {
return [self fetchAllWithPredicate:predicate sortDescriptors:sortDescriptors limit:0];
}
- (NSArray*)fetchAllWithPredicate:(NSPredicate*)predicate sortDescriptor:(NSSortDescriptor*)sortDescriptor limit:(NSInteger)limit offset:(NSInteger)offset
{
return [self fetchAllWithPredicate:predicate sortDescriptors:[NSArray arrayWithObject:sortDescriptor] limit:limit offset:offset];
}
- (NSArray*)fetchAllWithPredicate:(NSPredicate*)predicate sortDescriptor:(NSSortDescriptor*)sortDescriptor limit:(NSInteger)limit
{
return [self fetchAllWithPredicate:predicate sortDescriptors:[NSArray arrayWithObject:sortDescriptor] limit:limit];
}
- (NSArray*)fetchAllWithPredicate:(NSPredicate*)predicate sortDescriptor:(NSSortDescriptor*)sortDescriptor
{
return [self fetchAllWithPredicate:predicate sortDescriptors:[NSArray arrayWithObject:sortDescriptor] limit:0];
}
- (NSArray*)fetchAllWithPredicate:(NSPredicate*)predicate
{
return [self fetchAllWithPredicate:predicate sortDescriptors:nil];
}
- (NSArray*)fetchAll
{
// Grab everything (nil predicate)
return [self fetchAllWithPredicate:nil];
}
- (NSArray*)fetchAllWithRequest:(NSFetchRequest*)request;
{
return [self.managedObjectContext executeFetchRequest:request error:nil];
}
- (id)fetchOneWithPredicate:(NSPredicate*)predicate sortDescriptors:(NSArray*)sortDescriptors
{
// Grab an array of entities limited to 1
NSArray *returns = [self fetchAllWithPredicate:predicate sortDescriptors:sortDescriptors limit:1];
// Return the object if the array is not empty
if (returns && [returns count] > 0)
{
return [returns lastObject];
}
else
{
return nil;
}
}
- (id)fetchOneWithPredicate:(NSPredicate*)predicate sortDescriptor:(NSSortDescriptor*)sortDescriptor
{
return [self fetchOneWithPredicate:predicate sortDescriptors:[NSArray arrayWithObject:sortDescriptor]];
}
- (id)fetchOneWithPredicate:(NSPredicate*)predicate
{
return [self fetchOneWithPredicate:predicate sortDescriptors:nil];
}
- (NSInteger)countWithPredicate:(NSPredicate*)predicate
{
// Initialise the request, set the entity.
NSFetchRequest *request = [self fetchRequest];
// Set the predicate if not nil
if (predicate != nil)
{
[request setPredicate:predicate];
}
// Grab and return the results
return [self countWithRequest:request];
}
- (NSInteger)count
{
// Count everything (nil predicate)
return [self countWithPredicate:nil];
}
- (NSInteger)countWithRequest:(NSFetchRequest *)request
{
return [self.managedObjectContext countForFetchRequest:request error:nil];
}
- (void)removeAllWithPredicate:(NSPredicate*)predicate
{
// Grab all objects for the entity
NSArray *all = [self fetchAllWithPredicate:predicate];
// Iteratively remove them all
for (NSInteger i = 0; i<[all count]; i++)
{
NSManagedObject *object = [all objectAtIndex:i];
[object deleteObject];
}
}
- (void)removeAll
{
// Remove all objects (nil predicate)
[self removeAllWithPredicate:nil];
}
- (void)removeAllWithRequest:(NSFetchRequest *)request
{
// Grab all objects for the entity
NSArray *all = [self fetchAllWithRequest:request];
// Iteratively remove them all
for (NSInteger i = 0; i<[all count]; i++)
{
NSManagedObject *object = [all objectAtIndex:i];
[object deleteObject];
}
}
@end