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

时间:2014-05-15 15:27:12

标签: ios core-data model-view-controller

开始沿着'单身人士'的道路走下去。 (哇!!)现在,试图回溯一些步骤并将核心数据堆栈从应用代表中删除。

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

- (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个文件会更好吗?

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

1 个答案:

答案 0 :(得分:0)

我有一个班级," 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;
}

最后,我使用以下命令访问辅助类:

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

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