0

这是我声明的 .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];
}

问题:

  1. 如何在不在 AppDelegate 类中的视图控制器中声明核心数据?

  2. 在 AppDelegate 中使用此代码时,它的工作原理是什么?

  3. 在我进入普通班级后,它给了我错误

    like=[AppDelegate managedObjectContext]

4

1 回答 1

0

2.在 AppDelegate 中使用此代码时,它的工作原理是什么?

3.在我放入普通类之后,它给了我错误,例如=[AppDelegate managedObjectContext]

这就是你的答案 - 它仍然认为代码在应用程序委托中。

这个

[AppDelegate managedObjectContext]

应该

[coreData managedObjectContext]

一切都需要正确连接才能正常工作。

顺便说一句,调用一个类“coreData”是非常可怕的。我会忘记缺少的大写字母(Obj-C 类传统上以大写开头以强调它们是类),我指出它的原因是您使用的是已经存在的名称(除一个字母)和可能会变得非常混乱。

2 条建议 将课程重命名为合理的名称。使该类成为可以从任何地方调用的单例。

于 2015-08-24T14:15:43.593 回答