-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathSSYThreadConfinedCoreDataStack.m
94 lines (78 loc) · 3.25 KB
/
SSYThreadConfinedCoreDataStack.m
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
#import "SSYThreadConfinedCoreDataStack.h"
#import "NSBundle+MainApp.h"
#import "BSManagedDocument.h"
/* BSManagedDocument is a open source replacement for NSPersistentDocument.
It is recommended for any Core Data document-based app.
https://github.com/jerrykrinock/BSManagedDocument
*/
@implementation SSYThreadConfinedCoreDataStack
@synthesize managedObjectContext = m_managedObjectContext ;
@synthesize managedObjectModel = m_managedObjectModel;
@synthesize persistentStoreCoordinator = m_persistentStoreCoordinator;
@synthesize storeUrl = m_storeUrl ;
- (void)dealloc {
[m_managedObjectContext release] ;
[m_persistentStoreCoordinator release] ;
[m_managedObjectModel release] ;
[m_storeUrl release] ;
[super dealloc] ;
}
- (NSManagedObjectModel *)managedObjectModel {
// The managed object model for the application. It is a fatal error for the application not to be able to find and load its model.
if (!m_managedObjectModel) {
NSArray* bundles = [NSArray arrayWithObject:[NSBundle mainAppBundle]] ;
m_managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:bundles] ;
[m_managedObjectModel retain] ;
}
return m_managedObjectModel ;
}
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
// The persistent store coordinator for the application. This implementation creates and return a coordinator, having added the store for the application to it.
if (!m_persistentStoreCoordinator) {
NSError* error = nil;
// Create the coordinator and store
m_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]] ;
NSURL* url = [self storeUrl];
NSString* path = [url path];
path = [BSManagedDocument storePathForDocumentPath:path];
url = [NSURL fileURLWithPath:path];
error = nil ;
if (![m_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
configuration:nil
URL:url
options:nil
error:&error]) {
NSLog(@"Internal Error 285-0013 %@ %@", error, [error userInfo]) ;
}
}
return m_persistentStoreCoordinator;
}
- (NSManagedObjectContext *)managedObjectContext {
if (!m_managedObjectContext) {
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator) {
m_managedObjectContext = [[NSManagedObjectContext alloc] init] ;
[m_managedObjectContext setPersistentStoreCoordinator:coordinator] ;
[m_managedObjectContext setMergePolicy:NSMergeByPropertyObjectTrumpMergePolicy] ;
}
else {
// Fail
NSLog(@"Internal Error 292-4473 %@", [self storeUrl]) ;
}
}
return m_managedObjectContext ;
}
- (id)initWithStoreUrl:(NSURL*)url {
if (url) {
self = [super init] ;
if (self) {
[self setStoreUrl:url] ;
}
}
else {
[self release] ;
self = nil ;
}
return self ;
}
@end