gpt4 book ai didi

ios - 核心数据 : Create temporary models and maybe save to context

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

我对 Core Data 有疑问,因为我不知道处理问题的最佳方法:

我从服务器加载一个 json 并在 ManagedObjects 中解析结果。首先,ManagedObjects 应该是临时的。但是用户可以将 ManagedObject 放到传单中。然后应将 ManagedObject 保存到 CoreData。 (该对象应该可以离线访问)当用户稍后从服务器加载相同的对象时,应该获取已经保存的 ManagedObjects。

所以我不想将用户不需要的每个对象都放在 CoreData/PersistantStore 中。

首先我要做的是创建一个背景上下文:

__block NSManagedObjectContext *context = [(AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];
NSManagedObjectContext *backgroundContext = [[NSManagedObjectContext alloc]initWithConcurrencyType:NSPrivateQueueConcurrencyType];
backgroundContext.parentContext = context;

通过获取,我检查持久存储中是否已经有一个 ManagedObject。如果有的话,我会拿这个。否则在 nil 上下文中创建一个新的 ManagedObject。

NSArray *results = [backgroundContext executeFetchRequest:fetch error:&error];

if (!error && results.count == 1) {
myModel = [results objectAtIndex:0];
}
else {
NSEntityDescription *entity = [NSEntityDescription entityForName:@"MyModel" inManagedObjectContext:backgroundContext];
myModel = (MyModel *)[[NSManagedObject alloc] initWithEntity:entity insertIntoManagedObjectContext:nil];
}

我对每段关系都这样做:

if (! myModel.relation) {
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Relation" inManagedObjectContext:backgroundContext];
myModel.relation = (Relation *)[[NSManagedObject alloc] initWithEntity:entity insertIntoManagedObjectContext:myModel.managedObjectContext];
}

到目前为止,创建模型效果很好。但是如何保存一个模型呢?

managedObjectContext 为零。如果我在 managedObjectContext 上调用 save:,它会保存所有内容。

在我的 AppDelegate 中,我编写了一个函数来在主 ManagedObjectContext 中插入一个 ManagedObject:

- (void)insertObjectAndSave:(NSManagedObject *)managedObject {
if (!managedObject.managedObjectContext) {
[self.managedObjectContext insertObject:managedObject];
}

[self saveContext];
}

这是一个好的解决方案吗?还是有更好的方法在主 ManagedObjectContext 中保存临时 ManagedObject?

最佳答案

我的 Mundi 回答得很好..

这里有更多临时创建 NSManagedObject 的场景,如果我们愿意,我们是否可以将其永久化。

  • 创建临时对象
NSEntityDescription *entity = [NSEntityDescription entityForName:@"MyEntity" inManagedObjectContext:myMOC];
NSManagedObject *unassociatedObject = [[NSManagedObject alloc] initWithEntity:entity insertIntoManagedObjectContext:nil];
  • 如果您想永久保存,请编码
[managedObjectContext insertObject:unassociatedObject];
NSError *error = nil;

if (![managedObjectContext save:&error])
{
//Respond to the error
}

关于ios - 核心数据 : Create temporary models and maybe save to context,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25116275/

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