我第一次使用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确实关闭了构建之间的开放数据库。
答案 0 :(得分:1)
SQLite数据库与MySQL不同。它不是在某个地方运行的服务器。它只是您应用内的代码。因此,当您添加NSPersistenStore时,将打开数据库,当您的应用程序关闭时,数据库将被关闭。这就是SQLite的工作原理。
Xcode对您的数据库没有任何作用。这只是你的应用程序触摸它。