这是我声明的.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类中?
在AppDelegate中使用此代码的原因是什么?
在我放入正常课程后,它给了我错误
like=[AppDelegate managedObjectContext]
答案 0 :(得分:0)
2.在AppDelegate中使用此代码时,它的工作原理是什么?
3.在我放入普通类之后,它给出了我的错误,如= [AppDelegate managedObjectContext]
有你的答案 - 它仍然认为代码在app代理中。
这个
[AppDelegate managedObjectContext]
应该是
[coreData managedObjectContext]
所有内容都需要正确连接才能实现。
顺便说一下,调用类'coreData'非常可怕。我会忘记丢失的大写字母(Obj-C类传统上以资本开头强化它们是类),我指出它的原因是你使用的是已经存在的东西的名字(一个字母条)和可能会变得非常混乱。
2条建议 将课程重命名为合理的课程。 使类成为可以从任何地方调用的单例。