gpt4 book ai didi

ios - CoreData : Replace . sqlite导致崩溃

转载 作者:行者123 更新时间:2023-11-28 20:38:29 30 4
gpt4 key购买 nike

当我更新我的应用程序时,我在启动时使用我的 CoreData 模型做一些事情,然后我将持久存储使用的 .sqlite 文件替换为:

NSArray *stores = [__persistentStoreCoordinator persistentStores];

for(NSPersistentStore *store in stores) {
[__persistentStoreCoordinator removePersistentStore:store error:nil];
[[NSFileManager defaultManager] removeItemAtPath:store.URL.path error:nil];
}
__persistentStoreCoordinator = nil;
[self persistentStoreCoordinator];

__managedObjectContext = nil;
[self managedObjectContext];

一切正常,一切正常。但是当我通过主页按钮关闭应用程序时,它崩溃了:

[NSPersistentStoreCoordinator retain]: message sent to deallocated instance

我正在使用 ARC ... 实际上你可以说这无关紧要,因为它在关闭时会崩溃,所以你不会注意到崩溃。但是,当然,这不是一个选择,必须有一个正确的方法来做到这一点!?

有什么想法吗?为什么要将保留发送到 NSPersistenStoreCoordinator?它与 __persistentStoreCoordinator = nil; 有关,但我需要将其设为 nil,否则它不会使用新的 .sqlite。

干杯!

最佳答案

好吧,最后我找到了一个更好的(和有效的)方法来替换 .sqlite 和 storeCoordinator 的存储,而不需要 nil persistentStoreCoordinator:

NSArray *stores = [__persistentStoreCoordinator persistentStores];

for(NSPersistentStore *store in stores) {
[__persistentStoreCoordinator removePersistentStore:store error:nil];
[[NSFileManager defaultManager] removeItemAtPath:store.URL.path error:nil];
}

NSString *storePath = [[self applicationDocumentsDirectoryString] stringByAppendingPathComponent:@"PictureApp.sqlite"];

NSURL *storeUrl = [NSURL fileURLWithPath:[[self applicationDocumentsDirectoryString] stringByAppendingPathComponent:@"PictureApp.sqlite"]];

NSString *defaultStorePath = [[NSBundle mainBundle] pathForResource:@"PictureApp" ofType:@"sqlite"];
if (defaultStorePath) {
[[NSFileManager defaultManager] copyItemAtPath:defaultStorePath toPath:storePath error:NULL];
}

NSError *error = nil;
[__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error];

关于ios - CoreData : Replace . sqlite导致崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9572586/

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