Ios 使核心数据模型类可访问(应用程序设计)

Ios 使核心数据模型类可访问(应用程序设计),ios,core-data,model-view-controller,Ios,Core Data,Model View Controller,从“单身”开始。(唷!!)现在,尝试返回一些步骤,并将核心数据堆栈从应用程序委托中取出 在讨论中,我看到了以下代码: - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions(NSDictionary *)launchOptions { DataModel *dataModel = [[DataModel alloc] init]; self.rootViewController.

从“单身”开始。(唷!!)现在,尝试返回一些步骤,并将核心数据堆栈从应用程序委托中取出

在讨论中,我看到了以下代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions(NSDictionary *)launchOptions {
    DataModel *dataModel = [[DataModel alloc] init];
    self.rootViewController.dataModel = dataModel;
    ...
}
在DataModel.m中,是核心数据堆栈、启动web服务的方法和将返回的数据保存到核心数据中的方法。连接是另一个类

启动、启动连接、将托管对象上下文传递给根视图控制器以及接收web数据都可以正常工作。然后,Connection类中发布的通知(在数据接收完成后)通知要处理的数据的DataModel。问题是DataModel已被解除分配。应用程序崩溃了

在放弃DataModel的(shhh)单例类之后,问题是:如何保留DataModel来处理接收到的、用于核心数据的web数据?或者,将核心数据堆栈拆分并将接收到的数据处理为2个文件会更好吗

将核心数据堆栈和处理方法放在一个类中似乎是合乎逻辑的。我想通过将上下文从一个控制器传递到另一个控制器来构建此应用程序。

我有一个类“SVODataHelper”,其中包含以下内容:

#pragma mark - Setup

- (id) init
{
    self = [super init];
    if (!self)
        return nil;
    _model = [NSManagedObjectModel mergedModelFromBundles:nil];
    _coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:_model];
    _context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
    [_context setPersistentStoreCoordinator:_coordinator];
    return self; 
}

- (void) loadStore
{
    if (_store)
        return;
    NSError *error = nil;
    _store = [_coordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:[self storeURL] options:nil error:&error];
    if (!_store)
    {
        NSLog(@"Failed to add store. Error: %@", error);
        abort();
    }
}

- (void) setupCoreData
{
    [self loadStore];
}
然后,在AppDelegate中,我使用:

- (SVOData *)svoData
{
    if (!_svoDataHelper)
    {
        static dispatch_once_t predicate;
        dispatch_once (&predicate, ^{ _svoDataHelper = [[SVOData alloc] init]; }); // insures a single instance created to guarantee thread safety.  
        [_svoDataHelper setupCoreData];
    }
    return _svoDataHelper;
}
最后,我通过以下方式访问helper类:

    svoDataHelper = [(AppDelegate *)[[UIApplication sharedApplication] delegate] svoData];  

我不知道它是好是坏,但它是有效的。我从我读过的一些书中得到了这个概念(“学习IOS核心数据”)它看起来非常干净,因为它允许我将基本内容保存在一个单独的类中,同时避免传递指向该类的指针。

很有趣。谢谢。也许这说明了苹果为什么在模板的应用程序委托中包含核心数据。svoData中有很多内容:需要进行排序和消化。这不是仍然是一个单一的吗是否通过dispatch_once函数打开?