【问题标题】:Core Data database closing between builds?Core Data 数据库在构建之间关闭?
【发布时间】:2012-02-08 21:23:08
【问题描述】:

我是第一次使用 Core Data,只是好奇我所看到的是否正确。每次我通过 Xcode 运行应用程序时,它都会报告数据库存在、关闭和正在打开。下次我运行应用程序时也会发生同样的情况......

我的问题是,我自己并没有关闭数据库,我只是好奇我是否在某个地方出了问题,或者 iOS 是否正在关闭数据库本身。

EDIT_001:已添加代码。

- (void)viewDidLoad {
    [super viewDidLoad];
    if([self planetDatabase] == nil) {

        // CREATE MANAGED DOCUMENT
        NSLog(@"Database: Setup");
        NSArray *userDocumentPath = [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask];
        NSURL *databaseFileURL = [[userDocumentPath lastObject] URLByAppendingPathComponent:@"DefaultPlanetDatabase"];
        [self setPlanetDatabase:[[UIManagedDocument alloc] initWithFileURL:databaseFileURL]];

        // CHECK FOR EXISTING 
        if([[NSFileManager defaultManager] fileExistsAtPath:[databaseFileURL path]]) {

            // OPEN IF CLOSED
            if([[self planetDatabase] documentState] == UIDocumentStateClosed) {
                NSLog(@"Database: Closed");
                [[self planetDatabase] openWithCompletionHandler:^(BOOL success) {
                    if(success)[self doWhatsNext];
                }];
            // USE IF NORMAL
            } else if([[self planetDatabase] documentState] == UIDocumentStateNormal) {
                [self doWhatsNext];
            }
        // CREATE AND OPEN 
        } else {
            [[self planetDatabase] saveToURL: [[self planetDatabase] fileURL] forSaveOperation:UIDocumentSaveForCreating completionHandler:^(BOOL success) {
                if(success)[self doWhatsNext];
            }];
        }
    }
}

我第一次从 Xcode 中运行此代码时,数据库会创建为“CREATE AND OPEN”,下次运行此代码时会调用“OPEN IF CLOSED”。我认为这是正确的,但我只是想验证 Xcode 确实在构建之间关闭了打开的数据库。

【问题讨论】:

  • 报告、关闭和打开是什么意思?你在某处有一些日志语句吗?我们能看到它们吗?
  • 我实际上是指生成日志的代码,而不是日志本身!
  • 我会首先在您的项目中查找“数据库:”。我假设您没有编写所有这些代码,因此他们可能没有使用标准的 NSLog 语句来生成它,因此搜索字符串共性可能是找到这些语句的最佳选择。

标签: iphone objective-c xcode cocoa-touch core-data


【解决方案1】:

SQLite 数据库不像 MySQL。它不是在某处运行的服务器。它只是您应用程序中的代码。因此,当您添加 NSPersistenStore 时,数据库将打开,而当您的应用关闭时,数据库将关闭。这就是 SQLite 的工作原理。

Xcode 不会对您的数据库做任何事情。只是你的应用在触摸它。

【讨论】:

  • 正是我所追求的,这是一个小问题,但我想确保我对正在发生的事情的解释是正确的。非常感谢您的回答,非常感谢。
猜你喜欢
  • 2014-01-11
  • 1970-01-01
  • 2014-08-24
  • 2022-01-12
  • 1970-01-01
  • 2012-04-08
  • 2014-08-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多