如何管理备用类中的核心数据?

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 条建议 将类重命名为合理的名称。 使该类成为可以从任何地方调用的单例。

【讨论】:

以上是关于如何管理备用类中的核心数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何管理 Core Data 中的一对多关系?

xcode核心数据类中的数据类型不匹配

如何覆盖自定义管理器类中的 .update() 方法

在核心数据管理类中处理 NSManagedObjectContexts

如何管理具有递归函数调用的模板类中的数组(以数组的长度作为参数)?

接口自动化____如何根据测试数据excel中的数据量多少 去test类中定义同数据量的测试函数