如何管理备用类中的核心数据?
Posted
技术标签:
【中文标题】如何管理备用类中的核心数据?【英文标题】:How to manage core data in a alternate class? 【发布时间】:2015-08-24 14:05:05 【问题描述】:这是我声明的 .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]
【问题讨论】:
【参考方案1】:2.在 AppDelegate 中使用此代码时,它的工作原理是什么?
3.在我放入普通类后,它给了我错误,例如=[AppDelegate managedObjectContext]
这是你的答案 - 它仍然认为代码在应用程序委托中。
这个
[AppDelegate managedObjectContext]
应该是
[coreData managedObjectContext]
所有东西都需要正确连接才能正常工作。
顺便说一句,调用“coreData”类是非常可怕的。我会忘记缺少的大写字母(Obj-C 类传统上以大写开头以强调它们是类),我指出它的原因是您使用的是已经存在的名称(除一个字母)和可能会变得非常混乱。
2 条建议 将类重命名为合理的名称。 使该类成为可以从任何地方调用的单例。
【讨论】:
以上是关于如何管理备用类中的核心数据?的主要内容,如果未能解决你的问题,请参考以下文章
在核心数据管理类中处理 NSManagedObjectContexts