【发布时间】: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