在核心数据中使用 UIManagedDocument 的标准(或正确)方法是啥

Posted

技术标签:

【中文标题】在核心数据中使用 UIManagedDocument 的标准(或正确)方法是啥【英文标题】:What is the standard(or correct) way to use UIManagedDocument in core data在核心数据中使用 UIManagedDocument 的标准(或正确)方法是什么 【发布时间】:2014-05-02 13:19:54 【问题描述】:

我正在通过 Standford CS193P 学习 ios,我在核心数据部分遇到了问题。

我正在尝试使用核心数据构建应用程序,我为 AppDelegate 创建了一个类别(我将在 didFinishLaunchingWithOptions 中创建一个 UIManagedDocument),该类别实现了一种方法来创建一个 UIManagedDocument 并将其返回给 AppDelegate,这样我可以调用 self.managedDocument = [self createUIManagedDocument] 得到一个:

- (UIManagedDocument *)createUIManagedDocument


    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSURL *documentsDirectory = [[fileManager URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] firstObject];
    NSURL *url = [documentsDirectory URLByAppendingPathComponent:APP_NAME];
    UIManagedDocument *managedDocument = [[UIManagedDocument alloc] initWithFileURL:url];

    if ([[NSFileManager defaultManager] fileExistsAtPath:[url path]]) 
        // If the file exists, open it
        NSLog(@"File exists, not opening...");
        [managedDocument openWithCompletionHandler:^(BOOL success) 
            NSLog(@"File opened.");
        ];
     else 
        // If the file not exists, create it
        NSLog(@"File not exists, now creating...");
        [managedDocument saveToURL:url forSaveOperation:UIDocumentSaveForCreating completionHandler:^(BOOL success) 
            // If the file create succesfully, open it
            [managedDocument openWithCompletionHandler:^(BOOL success) 
                NSLog(@"File opened.");
            ];
        ];
    
    return managedDocument;

创建 UIManagedDocument 后,我​​尝试使用以下方法将此 UIManagedDocument 传递给我的视图控制器:

RootViewController *rootViewController = (RootViewController *)self.window.rootViewController;
rootViewController.managedDocument = self.managedDocument;

问题出现了,我无法在我的视图控制器中打开 UIManagedDocument。搜了一整天,得到了答案:我尝试同时打开两次,而它是异步的,处理IO请求需要时间。有一些方法,其中大多数使用 Singleton。

这是我的问题:

    我可以使用上述方法吗? 如果不是,在我的应用中创建和传递此 UIManagedDocument 的标准(或正确)方法是什么? 我是否应该将此 UIManagedDocument 中的 NSManagedObjectContext 传递给我的视图控制器,而不是传递 UIManagedDocument?

感谢您查看我的问题。

【问题讨论】:

【参考方案1】:

在课程中,我们被告知要使用通知来执行此操作,他在第 13 课 51:20 的演示中对此进行了解释。

【讨论】:

谢谢洛伦佐!我现在正在使用 MagicalRecord github.com/magicalpanda/magicalrecord. 这是一个答案——这个问题是指一个非常具体的在线课程(提问者和回答者显然都在学习),并指出课程材料中提供的解释非常有用。

以上是关于在核心数据中使用 UIManagedDocument 的标准(或正确)方法是啥的主要内容,如果未能解决你的问题,请参考以下文章

使用 JSON 键值 ( id ) 更新核心数据

在 Objective C 中的 iOS 应用程序中使用核心数据作为数据库的步骤

核心数据中的触发器

使用 NSObject 的核心数据类模型

使用 MKMapView、核心位置和核心数据

核心数据在过滤器中使用聚合函数