构建之间关闭核心数据数据库?

时间:2012-01-12 15:29:02

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

我第一次使用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确实关闭了构建之间的开放数据库。

1 个答案:

答案 0 :(得分:1)

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

Xcode对您的数据库没有任何作用。这只是你的应用程序触摸它。