私が宣言したように、これは.hファイルです
@protocol CoreData <NSObject>
-(NSManagedObjectContext *)managedObjectContext;
@end
@interface coreData : NSObject
{
id<CoreData> delegate;
}
@property (retain)id delegate;
@property (readonly,strong ,nonatomic) NSManagedObjectContext *managedObjectContext;
@property (readonly,strong ,nonatomic) NSManagedObjectModel *managedObjectModel;
@property (readonly,strong ,nonatomic) NSPersistentStoreCoordinator *persistStoreCoordinator;
-(void)saveContext;
-(NSURL *)applicationDocumentsDirectory;
@end
これは.mファイルです
@implementation coreData
@synthesize managedObjectContext = _managedObjectContext;
@synthesize managedObjectModel = _managedObjectModel;
@synthesize persistStoreCoordinator = _persistStoreCoordinator;
-(void)saveContext
{
NSError *error = nil;
NSManagedObjectContext *managedObjectContext = self.managedObjectContext;
if(managedObjectContext !=nil)
{
if([managedObjectContext hasChanges] && ![managedObjectContext save:&error]){
NSLog(@"Unresolved error %@,%@",error,[error userInfo]);
abort();
}
}
}
#pragma mark -core data stack
-(NSManagedObjectContext *)managedObjectContext
{
if(_managedObjectContext !=nil)
{
return _managedObjectContext;
}
NSPersistentStoreCoordinator *coordinator =[self persistStoreCoordinator];
if (coordinator !=nil)
{
_managedObjectContext=[[NSManagedObjectContext alloc] init];
[_managedObjectContext setPersistentStoreCoordinator:coordinator];
}
return _managedObjectContext;
}
-(NSManagedObjectModel *)managedObjectModel
{
if(_managedObjectModel !=nil)
{
return _managedObjectModel;
}
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"Superallocation" withExtension:@"momd"];
_managedObjectModel =[[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
return _managedObjectModel;
}
-(NSPersistentStoreCoordinator *)persistStoreCoordinator
{
if(_persistStoreCoordinator !=nil)
{
return _persistStoreCoordinator;
}
NSURL *storeURL =[[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"SuperantZ.sqlite"];
NSError *error = nil;
_persistStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if([_persistStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error])
{
NSLog(@"unresolved error %@,%@",error,[error userInfo]);
abort();
}
return _persistStoreCoordinator;
}
-(NSURL *)applicationDocumentsDirectory
{
return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
}
質問:
AppDelegateクラスではなくView Controllerでコアデータを宣言する方法は?
AppDelegate でこのコードを使用している間、なぜ機能するのでしょうか?
通常のクラスに配置した後、エラーが発生しています
like=[AppDelegate managedObjectContext]