gpt4 book ai didi

iphone - IOS5无法使用核心数据库

转载 作者:行者123 更新时间:2023-11-29 13:26:27 27 4
gpt4 key购买 nike

我正在使用一个核心数据库,它在 IOS 6 中工作,但是当我试图在 IOS 5 上测试它时。它没有做任何事情。让我解释一下我在做什么。

首先,我在我的 viewWillAppear 中执行此操作。

- (void)viewWillAppear:(BOOL)animated
{
NSLog(@"view appeared");
[super viewWillAppear:animated];
if (!self.genkDatabase) {
NSLog(@"comes to here");
NSURL *url = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
url = [url URLByAppendingPathComponent:@"Default appGenk Database2"];
// url is now "<Documents Directory>/Default Photo Database"
self.genkDatabase = [[UIManagedDocument alloc] initWithFileURL:url]; // setter will create this for us on disk
NSLog(@"database created on disk");
}

}

然后在UseDocument方法中出现。

- (void)useDocument
{
NSLog(@"Comses in the use document");
if (![[NSFileManager defaultManager] fileExistsAtPath:[self.genkDatabase.fileURL path]]) {
// does not exist on disk, so create it
[self.genkDatabase saveToURL:self.genkDatabase.fileURL forSaveOperation:UIDocumentSaveForCreating completionHandler:^(BOOL success) {
NSLog(@"create");
[self setupFetchedResultsController];
[self fetchGenkDataIntoDocument:self.genkDatabase];

}];
} else if (self.genkDatabase.documentState == UIDocumentStateClosed) {
NSLog(@"closed news");
// exists on disk, but we need to open it
[self.genkDatabase openWithCompletionHandler:^(BOOL success) {
[self setupFetchedResultsController];
}];
} else if (self.genkDatabase.documentState == UIDocumentStateNormal) {
NSLog(@"normal");
// already open and ready to use
[self setupFetchedResultsController];
}

}

最后进入setDatabase方法。

- (void)setGenkDatabase:(UIManagedDocument *)genkDatabase
{
if (_genkDatabase != genkDatabase) {
_genkDatabase = genkDatabase;
[self useDocument];
}
NSLog(@"Comes in the setdatabase methode.");
}

完成所有这些操作会产生以下日志。

2012-10-22 10:42:47.444 RacingGenk[4786:c07] view appeared
2012-10-22 10:42:47.445 RacingGenk[4786:c07] comes to here
2012-10-22 10:42:47.459 RacingGenk[4786:c07] Comses in the use document
2012-10-22 10:42:47.460 RacingGenk[4786:c07] Comes in the setdatabase methode.
2012-10-22 10:42:47.461 RacingGenk[4786:c07] database created on disk

如您所见,它不会在我的使用文档中打印创建日志。因此它无法执行方法FetchDataIntoDocument

谁能帮我解决这个问题。我现在一直在寻找这个问题。

非常感谢。

史蒂夫

最佳答案

您是使用模拟器还是在设备上进行测试?模拟器不区分大小写 - 设备在文件访问时区分大小写,记住这一点!

但除此之外,NSFileManager 的文档建议不要检查文件是否存在,而只是尝试读取文件并优雅地处理任何错误(例如文件未找到错误)。因此,只需尝试加载文件而不是检查它是否存在。

而且我没有看到您的数据库文件有任何文件扩展名!它只是声明“”默认 appGenk 数据库 2”。到目前为止,这已经是文件名还是只是另一个子目录?

编辑:

你可以试试下面的代码:

- (void) setupStore {
NSString* storePath = [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"mydatabase.sqlite"];

// Set up the store.
NSFileManager* fileManager = [NSFileManager defaultManager];
// If the expected store doesn't exist, create one.
if (![fileManager fileExistsAtPath: storePath]) {
// create your store here!
}
}


- (NSString*) applicationDocumentsDirectory {
return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
}

“mydatabase.sqlite”是您希望出现在文档目录中的数据库文件的名称。

如果您想查看有关如何设置核心数据持久存储的完整示例,您可以查看 apples 自己的 iPhoneCoreDataRecipes例子。看看

RecipesAppDelegate.m

实现。

关于iphone - IOS5无法使用核心数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13007736/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com