/Trybe/Categories/NSManagedObject/NSManagedObject+MagicalFinders.m

https://bitbucket.org/sensicalapps/trybe · Objective C · 346 lines · 269 code · 69 blank · 8 comment · 1 complexity · d59fd52682cbb69977e14dcbfd7f10f2 MD5 · raw file

  1. //
  2. // NSManagedObject+MagicalFinders.m
  3. // Magical Record
  4. //
  5. // Created by Saul Mora on 3/7/12.
  6. // Copyright (c) 2012 Magical Panda Software LLC. All rights reserved.
  7. //
  8. #import "NSManagedObject+MagicalFinders.h"
  9. #import "NSManagedObject+MagicalRequests.h"
  10. #import "NSManagedObject+MagicalRecord.h"
  11. #import "NSManagedObjectContext+MagicalThreading.h"
  12. @implementation NSManagedObject (MagicalFinders)
  13. #pragma mark - Finding Data
  14. + (NSArray *) MR_findAllInContext:(NSManagedObjectContext *)context
  15. {
  16. return [self MR_executeFetchRequest:[self MR_requestAllInContext:context] inContext:context];
  17. }
  18. + (NSArray *) MR_findAll
  19. {
  20. return [self MR_findAllInContext:[NSManagedObjectContext MR_contextForCurrentThread]];
  21. }
  22. + (NSArray *) MR_findAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context
  23. {
  24. NSFetchRequest *request = [self MR_requestAllSortedBy:sortTerm ascending:ascending inContext:context];
  25. return [self MR_executeFetchRequest:request inContext:context];
  26. }
  27. + (NSArray *) MR_findAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending
  28. {
  29. return [self MR_findAllSortedBy:sortTerm
  30. ascending:ascending
  31. inContext:[NSManagedObjectContext MR_contextForCurrentThread]];
  32. }
  33. + (NSArray *) MR_findAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context
  34. {
  35. NSFetchRequest *request = [self MR_requestAllSortedBy:sortTerm
  36. ascending:ascending
  37. withPredicate:searchTerm
  38. inContext:context];
  39. return [self MR_executeFetchRequest:request inContext:context];
  40. }
  41. + (NSArray *) MR_findAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm
  42. {
  43. return [self MR_findAllSortedBy:sortTerm
  44. ascending:ascending
  45. withPredicate:searchTerm
  46. inContext:[NSManagedObjectContext MR_contextForCurrentThread]];
  47. }
  48. + (NSArray *) MR_findAllWithPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context
  49. {
  50. NSFetchRequest *request = [self MR_createFetchRequestInContext:context];
  51. [request setPredicate:searchTerm];
  52. return [self MR_executeFetchRequest:request
  53. inContext:context];
  54. }
  55. + (NSArray *) MR_findAllWithPredicate:(NSPredicate *)searchTerm
  56. {
  57. return [self MR_findAllWithPredicate:searchTerm
  58. inContext:[NSManagedObjectContext MR_contextForCurrentThread]];
  59. }
  60. + (id) MR_findFirstInContext:(NSManagedObjectContext *)context
  61. {
  62. NSFetchRequest *request = [self MR_createFetchRequestInContext:context];
  63. return [self MR_executeFetchRequestAndReturnFirstObject:request inContext:context];
  64. }
  65. + (id) MR_findFirst
  66. {
  67. return [self MR_findFirstInContext:[NSManagedObjectContext MR_contextForCurrentThread]];
  68. }
  69. + (id) MR_findFirstByAttribute:(NSString *)attribute withValue:(id)searchValue inContext:(NSManagedObjectContext *)context
  70. {
  71. NSFetchRequest *request = [self MR_requestFirstByAttribute:attribute withValue:searchValue inContext:context];
  72. // [request setPropertiesToFetch:[NSArray arrayWithObject:attribute]];
  73. return [self MR_executeFetchRequestAndReturnFirstObject:request inContext:context];
  74. }
  75. + (id) MR_findFirstByAttribute:(NSString *)attribute withValue:(id)searchValue
  76. {
  77. return [self MR_findFirstByAttribute:attribute
  78. withValue:searchValue
  79. inContext:[NSManagedObjectContext MR_contextForCurrentThread]];
  80. }
  81. + (id) MR_findFirstOrderedByAttribute:(NSString *)attribute ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context;
  82. {
  83. NSFetchRequest *request = [self MR_requestAllSortedBy:attribute ascending:ascending inContext:context];
  84. [request setFetchLimit:1];
  85. return [self MR_executeFetchRequestAndReturnFirstObject:request inContext:context];
  86. }
  87. + (id) MR_findFirstOrderedByAttribute:(NSString *)attribute ascending:(BOOL)ascending;
  88. {
  89. return [self MR_findFirstOrderedByAttribute:attribute
  90. ascending:ascending
  91. inContext:[NSManagedObjectContext MR_contextForCurrentThread]];
  92. }
  93. + (id) MR_findFirstWithPredicate:(NSPredicate *)searchTerm
  94. {
  95. return [self MR_findFirstWithPredicate:searchTerm inContext:[NSManagedObjectContext MR_contextForCurrentThread]];
  96. }
  97. + (id) MR_findFirstWithPredicate:(NSPredicate *)searchTerm inContext:(NSManagedObjectContext *)context
  98. {
  99. NSFetchRequest *request = [self MR_requestFirstWithPredicate:searchTerm inContext:context];
  100. return [self MR_executeFetchRequestAndReturnFirstObject:request inContext:context];
  101. }
  102. + (id) MR_findFirstWithPredicate:(NSPredicate *)searchterm sortedBy:(NSString *)property ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context
  103. {
  104. NSFetchRequest *request = [self MR_requestAllSortedBy:property ascending:ascending withPredicate:searchterm inContext:context];
  105. return [self MR_executeFetchRequestAndReturnFirstObject:request inContext:context];
  106. }
  107. + (id) MR_findFirstWithPredicate:(NSPredicate *)searchterm sortedBy:(NSString *)property ascending:(BOOL)ascending
  108. {
  109. return [self MR_findFirstWithPredicate:searchterm
  110. sortedBy:property
  111. ascending:ascending
  112. inContext:[NSManagedObjectContext MR_contextForCurrentThread]];
  113. }
  114. + (id) MR_findFirstWithPredicate:(NSPredicate *)searchTerm andRetrieveAttributes:(NSArray *)attributes inContext:(NSManagedObjectContext *)context
  115. {
  116. NSFetchRequest *request = [self MR_createFetchRequestInContext:context];
  117. [request setPredicate:searchTerm];
  118. [request setPropertiesToFetch:attributes];
  119. return [self MR_executeFetchRequestAndReturnFirstObject:request inContext:context];
  120. }
  121. + (id) MR_findFirstWithPredicate:(NSPredicate *)searchTerm andRetrieveAttributes:(NSArray *)attributes
  122. {
  123. return [self MR_findFirstWithPredicate:searchTerm
  124. andRetrieveAttributes:attributes
  125. inContext:[NSManagedObjectContext MR_contextForCurrentThread]];
  126. }
  127. + (id) MR_findFirstWithPredicate:(NSPredicate *)searchTerm sortedBy:(NSString *)sortBy ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context andRetrieveAttributes:(id)attributes, ...
  128. {
  129. NSFetchRequest *request = [self MR_requestAllSortedBy:sortBy
  130. ascending:ascending
  131. withPredicate:searchTerm
  132. inContext:context];
  133. [request setPropertiesToFetch:[self MR_propertiesNamed:attributes]];
  134. return [self MR_executeFetchRequestAndReturnFirstObject:request inContext:context];
  135. }
  136. + (id) MR_findFirstWithPredicate:(NSPredicate *)searchTerm sortedBy:(NSString *)sortBy ascending:(BOOL)ascending andRetrieveAttributes:(id)attributes, ...
  137. {
  138. return [self MR_findFirstWithPredicate:searchTerm
  139. sortedBy:sortBy
  140. ascending:ascending
  141. inContext:[NSManagedObjectContext MR_contextForCurrentThread]
  142. andRetrieveAttributes:attributes];
  143. }
  144. + (NSArray *) MR_findByAttribute:(NSString *)attribute withValue:(id)searchValue inContext:(NSManagedObjectContext *)context
  145. {
  146. NSFetchRequest *request = [self MR_requestAllWhere:attribute isEqualTo:searchValue inContext:context];
  147. return [self MR_executeFetchRequest:request inContext:context];
  148. }
  149. + (NSArray *) MR_findByAttribute:(NSString *)attribute withValue:(id)searchValue
  150. {
  151. return [self MR_findByAttribute:attribute
  152. withValue:searchValue
  153. inContext:[NSManagedObjectContext MR_contextForCurrentThread]];
  154. }
  155. + (NSArray *) MR_findByAttribute:(NSString *)attribute withValue:(id)searchValue andOrderBy:(NSString *)sortTerm ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context
  156. {
  157. NSPredicate *searchTerm = [NSPredicate predicateWithFormat:@"%K = %@", attribute, searchValue];
  158. NSFetchRequest *request = [self MR_requestAllSortedBy:sortTerm ascending:ascending withPredicate:searchTerm inContext:context];
  159. return [self MR_executeFetchRequest:request inContext:context];
  160. }
  161. + (NSArray *) MR_findByAttribute:(NSString *)attribute withValue:(id)searchValue andOrderBy:(NSString *)sortTerm ascending:(BOOL)ascending
  162. {
  163. return [self MR_findByAttribute:attribute
  164. withValue:searchValue
  165. andOrderBy:sortTerm
  166. ascending:ascending
  167. inContext:[NSManagedObjectContext MR_contextForCurrentThread]];
  168. }
  169. #pragma mark -
  170. #pragma mark NSFetchedResultsController helpers
  171. #if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR
  172. + (NSFetchedResultsController *) MR_fetchController:(NSFetchRequest *)request delegate:(id<NSFetchedResultsControllerDelegate>)delegate useFileCache:(BOOL)useFileCache groupedBy:(NSString *)groupKeyPath inContext:(NSManagedObjectContext *)context
  173. {
  174. NSString *cacheName = useFileCache ? [NSString stringWithFormat:@"MagicalRecord-Cache-%@", NSStringFromClass([self class])] : nil;
  175. NSFetchedResultsController *controller =
  176. [[NSFetchedResultsController alloc] initWithFetchRequest:request
  177. managedObjectContext:context
  178. sectionNameKeyPath:groupKeyPath
  179. cacheName:cacheName];
  180. controller.delegate = delegate;
  181. return controller;
  182. }
  183. + (NSFetchedResultsController *) MR_fetchAllWithDelegate:(id<NSFetchedResultsControllerDelegate>)delegate;
  184. {
  185. return [self MR_fetchAllWithDelegate:delegate inContext:[NSManagedObjectContext MR_contextForCurrentThread]];
  186. }
  187. + (NSFetchedResultsController *) MR_fetchAllWithDelegate:(id<NSFetchedResultsControllerDelegate>)delegate inContext:(NSManagedObjectContext *)context;
  188. {
  189. NSFetchRequest *request = [self MR_requestAllInContext:context];
  190. NSFetchedResultsController *controller = [self MR_fetchController:request delegate:delegate useFileCache:NO groupedBy:nil inContext:context];
  191. [self MR_performFetch:controller];
  192. return controller;
  193. }
  194. + (NSFetchedResultsController *) MR_fetchAllGroupedBy:(NSString *)group withPredicate:(NSPredicate *)searchTerm sortedBy:(NSString *)sortTerm ascending:(BOOL)ascending delegate:(id<NSFetchedResultsControllerDelegate>)delegate inContext:(NSManagedObjectContext *)context
  195. {
  196. NSFetchRequest *request = [self MR_requestAllSortedBy:sortTerm
  197. ascending:ascending
  198. withPredicate:searchTerm
  199. inContext:context];
  200. NSFetchedResultsController *controller = [self MR_fetchController:request
  201. delegate:delegate
  202. useFileCache:NO
  203. groupedBy:group
  204. inContext:context];
  205. [self MR_performFetch:controller];
  206. return controller;
  207. }
  208. + (NSFetchedResultsController *) MR_fetchAllGroupedBy:(NSString *)group withPredicate:(NSPredicate *)searchTerm sortedBy:(NSString *)sortTerm ascending:(BOOL)ascending delegate:(id)delegate
  209. {
  210. return [self MR_fetchAllGroupedBy:group
  211. withPredicate:searchTerm
  212. sortedBy:sortTerm
  213. ascending:ascending
  214. delegate:delegate
  215. inContext:[NSManagedObjectContext MR_contextForCurrentThread]];
  216. }
  217. + (NSFetchedResultsController *) MR_fetchAllGroupedBy:(NSString *)group withPredicate:(NSPredicate *)searchTerm sortedBy:(NSString *)sortTerm ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context;
  218. {
  219. return [self MR_fetchAllGroupedBy:group
  220. withPredicate:searchTerm
  221. sortedBy:sortTerm
  222. ascending:ascending
  223. delegate:nil
  224. inContext:context];
  225. }
  226. + (NSFetchedResultsController *) MR_fetchAllGroupedBy:(NSString *)group withPredicate:(NSPredicate *)searchTerm sortedBy:(NSString *)sortTerm ascending:(BOOL)ascending
  227. {
  228. return [self MR_fetchAllGroupedBy:group
  229. withPredicate:searchTerm
  230. sortedBy:sortTerm
  231. ascending:ascending
  232. inContext:[NSManagedObjectContext MR_contextForCurrentThread]];
  233. }
  234. + (NSFetchedResultsController *) MR_fetchAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm groupBy:(NSString *)groupingKeyPath inContext:(NSManagedObjectContext *)context
  235. {
  236. NSFetchRequest *request = [self MR_requestAllSortedBy:sortTerm
  237. ascending:ascending
  238. withPredicate:searchTerm
  239. inContext:context];
  240. NSFetchedResultsController *controller = [self MR_fetchController:request
  241. delegate:nil
  242. useFileCache:NO
  243. groupedBy:groupingKeyPath
  244. inContext:[NSManagedObjectContext MR_contextForCurrentThread]];
  245. [self MR_performFetch:controller];
  246. return controller;
  247. }
  248. + (NSFetchedResultsController *) MR_fetchAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm groupBy:(NSString *)groupingKeyPath;
  249. {
  250. return [self MR_fetchAllSortedBy:sortTerm
  251. ascending:ascending
  252. withPredicate:searchTerm
  253. groupBy:groupingKeyPath
  254. inContext:[NSManagedObjectContext MR_contextForCurrentThread]];
  255. }
  256. + (NSFetchedResultsController *) MR_fetchAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm groupBy:(NSString *)groupingKeyPath delegate:(id<NSFetchedResultsControllerDelegate>)delegate inContext:(NSManagedObjectContext *)context
  257. {
  258. NSFetchedResultsController *controller = [self MR_fetchAllGroupedBy:groupingKeyPath
  259. withPredicate:searchTerm
  260. sortedBy:sortTerm
  261. ascending:ascending
  262. delegate:delegate
  263. inContext:context];
  264. [self MR_performFetch:controller];
  265. return controller;
  266. }
  267. + (NSFetchedResultsController *) MR_fetchAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending withPredicate:(NSPredicate *)searchTerm groupBy:(NSString *)groupingKeyPath delegate:(id<NSFetchedResultsControllerDelegate>)delegate
  268. {
  269. return [self MR_fetchAllSortedBy:sortTerm
  270. ascending:ascending
  271. withPredicate:searchTerm
  272. groupBy:groupingKeyPath
  273. delegate:delegate
  274. inContext:[NSManagedObjectContext MR_contextForCurrentThread]];
  275. }
  276. #endif
  277. @end