gpt4 book ai didi

ios - 核心数据文件损坏时如何绕过警报消息?

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:04:36 25 4
gpt4 key购买 nike

如果核心数据损坏,这可能会在某些情况下发生,因为用户打开 .sqlite 文件并进行一些无效更改。

我收到以下警告消息(来自内部框架或操作系统,我不知道):

enter image description here

我放置了断点,在此警报之后,控件转到以下方法。这里 dict 设置了一些文本,再次作为警告显示给用户。

我注释了一些语句并添加了一个方法 deleteAll,它将静默删除所有三个文件。

- (NSManagedObjectContext *)managedObjectContext //1
{
if (_managedObjectContext) {
return _managedObjectContext;
}

NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (!coordinator) {
// NSMutableDictionary *dict = [NSMutableDictionary dictionary];
// [dict setValue:@"Failed to initialize the store. \n\nResetting..." forKey:NSLocalizedDescriptionKey];
// [dict setValue:@"There was an error building up the data file." forKey:NSLocalizedFailureReasonErrorKey];
// NSError *error = [NSError errorWithDomain:@"YOUR_ERROR_DOMAIN" code:9999 userInfo:dict];
// [[NSApplication sharedApplication] presentError:error];

[self deleteAll];

return nil;
}
_managedObjectContext = [[NSManagedObjectContext alloc] init];
[_managedObjectContext setPersistentStoreCoordinator:coordinator];

return _managedObjectContext;
}

-(void)deleteAll{
NSURL *url = [self applicationFilesDirectory];
NSArray *files = @[@"CoreDataInput.sqlite", @"CoreDataInput.sqlite-shm", @"CoreDataInput.sqlite-wal"];

for (NSString *file in files) {
NSURL *tempUrl =[url URLByAppendingPathComponent:file];
NSLog(@"url is : %@", tempUrl);

NSError *error;
[[NSFileManager defaultManager]removeItemAtURL:tempUrl
error:&error];
}
}

在此之后,我将再次创建核心数据文件。到目前为止一切顺利。

我的要求是不显示上述警告/警报。如何删除该警告,是否有任何 API/通知等可以绕过它。

在 OSX 中这可能不会像上面那样发生,但会有一些其他消息。

最佳答案

我找到了答案:)

我删除了以下自动生成方法中的 [[NSApplication sharedApplication] presentError:error]; 语句。现在,即使找不到文件或文件已损坏,它也会默默地创建一个新文件。当然,所有数据都已删除,因为我不想要它们。

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
...
if (!ok) {
//[[NSApplication sharedApplication] presentError:error];
return nil;
}
} else {
if (![properties[NSURLIsDirectoryKey] boolValue]) {
...
//[[NSApplication sharedApplication] presentError:error];
return nil;
}
}

...
//[[NSApplication sharedApplication] presentError:error];
return nil;
}
_persistentStoreCoordinator = coordinator;

return _persistentStoreCoordinator;
}

关于ios - 核心数据文件损坏时如何绕过警报消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24267690/

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