gpt4 book ai didi

ios - 核心数据不会在应用程序启动之间保留数据

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

我有一个正在使用核心数据的应用程序。正在创建核心数据堆栈(上下文、对象图、持久存储协调器和持久存储),我可以毫无问题地使用它。问题是保存的数据没有持久化,有人可以帮我解决我做错了什么吗?这是我创建核心数据堆栈的地方。

- (void)initializeCoreDataStack
{
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"Favorites"
withExtension:@"momd"];
if (!modelURL)
NSLog(@"MODEL URL NOT INITIALIZED");

NSManagedObjectModel *mom = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
if (!mom)
NSLog(@"OBJECT MODEL NOT CREATED");

NSPersistentStoreCoordinator * psc = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:mom];
if (!psc)
NSLog(@"PERSISTENT STORE COORDINATOR NOT CREATED");

NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
[moc setPersistentStoreCoordinator:psc];
self.managedObjectContext = moc;

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{
NSArray *directory = [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory
inDomains:NSUserDomainMask];
NSURL *storeUrl = [directory lastObject];
storeUrl = [storeUrl URLByAppendingPathComponent:@"Favorites.sqlite"];

NSError *error = nil;
NSPersistentStore *store = [psc addPersistentStoreWithType:NSSQLiteStoreType
configuration:nil
URL:storeUrl
options:nil
error:&error];
if (!store)
{
NSLog(@"ERROR CREATING STORE: %@ %@", error.localizedDescription, error.domain);
// present error to user
}
else
{
dispatch_sync(dispatch_get_main_queue(), ^{
// do something once the stack is finished being created
NSLog(@"persistent store created");
});
}
});
}

最佳答案

您必须显式保存核心数据,否则它不会持久存在。不过不难解决。

在您的 Controller 实现文件(例如 coreDataViewController.m)中,当您想保存对核心数据的更改时调用此函数

// add this call, whenever you want to save data
// e.g. responding to a UIButton event
[self saveCoreDataContext];

- (void)saveCoreDataContext
{
NSError *error = nil;
NSManagedObjectContext *managedObjectContext = self.managedObjectContext;
if (managedObjectContext != nil) {
if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
}
}

关于ios - 核心数据不会在应用程序启动之间保留数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21446443/

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