iOS - 更新多个CoreData实体&上下文

时间:2015-09-12 20:03:55

标签: ios objective-c core-data nsmanagedobjectcontext

我在我的应用程序中使用CoreData,我有两个主要实体,让我们说Cats and Dogs。 我有这个方法用于初始化我的上下文:

     - (NSManagedObjectContext *)managedObjectContext
 {
 NSManagedObjectContext *context = nil;
 id delegate = [[UIApplication sharedApplication] delegate];
 if ([delegate performSelector:@selector(managedObjectContext)]) {
 context = [delegate managedObjectContext];
 }
 return context;
 }

在我的App Delegate中引用此方法:

- (NSManagedObjectContext *)managedObjectContext
{
    if (_managedObjectContext != nil) {
        return _managedObjectContext;
    }

    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
    if (coordinator != nil) {
        _managedObjectContext = [[NSManagedObjectContext alloc] init];
        [_managedObjectContext setPersistentStoreCoordinator:coordinator];
    }
    return _managedObjectContext;
}

现在,在某些时候,我必须更新我的Cats实体中的一些数据。

           NSManagedObjectContext *context = [self managedObjectContext];
            NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Cats"];
            NSMutableArray *catsArrayData = [[context executeFetchRequest:fetchRequest error:nil] mutableCopy];
    NSManagedObject *aCat = [catsArrayData objectAtIndex:i];
    NSMutableArray *catsArray = [aCat valueForKey:@"cat"];
   [catsArray addObject:responseData];
    [aCat setValue:catsArray forKey:@"cat"];
                    NSError *error = nil;
[context save:&error];

然后,我想为我的Dogs实体做同样的事情。所以我使用相同的代码,但对于狗实体。这是我的代码的另一部分,所以我必须重新定义:

NSManagedObjectContext *context = [self managedObjectContext];

但问题是即使我保存了第二个上下文,它实际上也没有保存。数据不存在。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

您需要实施自己的变更通知机制,这是学习它的好资源。 Multi-Context CoreData