Core data 从两个不同的实体获取对象

Core data 从两个不同的实体获取对象,core-data,nsmanagedobject,nsmanagedobjectcontext,persistent-storage,Core Data,Nsmanagedobject,Nsmanagedobjectcontext,Persistent Storage,在我的项目中,我使用相同的MOC和持久性存储在同一数据模型中的两个不同实体中输入相同的对象。我不想复制实体,因为我要修改(删除)第一个实体中的对象。我的问题是如何从另一个实体获取对象?我需要有不同的持久性存储和MOC吗?我已经获取了对象,但是它给了我空值,告诉我对象不能是空值 我猜价值观并没有保存在核心数据中。下面是我用来在coreData中存储值的代码行 CommonEvent *commonEvent = (CommonEvent *)[NSEntityDescription insertN

在我的项目中,我使用相同的MOC和持久性存储在同一数据模型中的两个不同实体中输入相同的对象。我不想复制实体,因为我要修改(删除)第一个实体中的对象。我的问题是如何从另一个实体获取对象?我需要有不同的持久性存储和MOC吗?我已经获取了对象,但是它给了我空值,告诉我对象不能是空值

我猜价值观并没有保存在核心数据中。下面是我用来在coreData中存储值的代码行

CommonEvent *commonEvent = (CommonEvent *)[NSEntityDescription insertNewObjectForEntityForName:@"CommonEvent" inManagedObjectContext:_managedObjectContext];


[commonEvent setValue:number forKey:@"commonNumber"];
[commonEvent setValue:name forKey:@"commonName"];
下面是从核心数据中获取数据的代码行

CommonEvent *event;

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"CommonEvent" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];

// define a sort descriptor
NSSortDescriptor *nameDescriptor = [[NSSortDescriptor alloc]initWithKey:@"commonName" ascending:YES];
NSSortDescriptor *numberDescriptor = [[NSSortDescriptor alloc]initWithKey:@"commonNumber" ascending:YES];



NSArray *scArray = [[NSArray alloc]initWithObjects:nameDescriptor,numberDescriptor, nil];


// give sort descriptor array to the fetch request
fetchRequest.sortDescriptors = scArray;

// fetch all objects
NSError *error = nil;
NSArray *fetchedObjects = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];

if (fetchedObjects == nil) {
    NSLog(@" we have a problem: %@", error);
}

NSMutableArray *mutableArray = [[NSMutableArray alloc]init];
NSLog(@" %@  %@  for index:%d", [event.commonNumber description],[event.commonName description], indexPath.row);  // It shows that object values are null


// display all objects
for (CommonEvent *event in fetchedObjects) {

    [mutableArray addObject:[event.commonNumber description]];
    //
     NSLog(@" %@  %@  for index:%d", [event.commonNumber description],[event.commonName description], indexPath.row);
}

将数据插入主运行中心后,您必须保存数据:

NSError *error;
[_managedObjectContext save:&error]; 
另外,既然已经创建了NSManagedObject子类,为什么还要使用键值编码?您可以使用点符号书写并避免错误:

commonEvent.commonNumber = number;
commonEvent.commonName = name; 
此外,在代码中,您正在声明
事件
,并且从不初始化它。当然是
nil
。您可能打算使用获取的结果,例如

CommonEvent *event = fetchedObjects.count ? fetchedObjects[0] : nil;
如果您使代码更简洁,那么您的代码将更易于阅读:

NSFetchRequest *request = 
    [NSFetchRequest fetchRequestWithEntityName:@"CommonEvent"];
request.sortDescriptors = @[
  [NSSortDescriptor sortDescriptorWithKey:@"commonName" ascending:YES],
  [NSSortDescriptor sortDescriptorWithKey:@"commonNumber" ascending:YES]];
NSError *error;
NSArray *fetchedObjects = [_managedObjectContext executeFetchRequest:request
                           error:&error];

你的问题很难理解。但是,在你发布的代码中,我没有看到任何保存数据的调用。很抱歉。。。我使用下面的代码将数据保存在核心数据中。CommonEvent*CommonEvent=(CommonEvent*)[NSEntityDescription insertNewObjectForEntityForName:@“CommonEvent”在managedObjectContext:_managedObjectContext];[commonEvent setValue:number-forKey:@“commonNumber”];[commonEvent setValue:name forKey:@“commonName”];你在你的问题中包括了这一点,但这并没有保存任何数据。要使用核心数据保存数据,您需要调用
-[NSManagedObjectContext save:
。是否有用于此的代码段