小编mar*_*rco的帖子

CoreData:创建临时模型并保存到上下文

我有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;
Run Code Online (Sandbox Code Playgroud)

使用fetch,我检查persistantstore中是否已存在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];
}
Run Code Online (Sandbox Code Playgroud)

我对每一段关系都这样做:

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

通过创建模型到目前为止工作正常.但如何保存一个模型?

managedObjectContext为nil.如果我在managedObjectContext上调用save:它会保存所有内容.

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

- …
Run Code Online (Sandbox Code Playgroud)

core-data temporary nsmanagedobject nsmanagedobjectcontext ios

2
推荐指数
2
解决办法
1734
查看次数