-1

В моем проекте я вхожу в те же объекты в двух разных объектах в одной и той же модели данных с такими же MOC и Persistence Store. Я не хочу дублировать объект, потому что я собираюсь изменить (удалить) объекты из первого объекта. Мой вопрос: как я собираюсь извлечь объекты из другого объекта? Я должен иметь разные хранилища сохранения и 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); 
} 
+0

Ваш вопрос очень трудно понять. Но я не вижу никакого вызова для сохранения данных в любом месте кода, который вы опубликовали. –

+0

Извините, что ... Я сохраняю свои данные в основных данных, используя следующий код. CommonEvent * commonEvent = (CommonEvent *) [NSEntityDescription insertNewObjectForEntityForName: @ "CommonEvent" inManagedObjectContext: _managedObjectContext]; [commonEvent setValue: number forKey: @ "commonNumber"]; [commonEvent setValue: name forKey: @ "commonName"]; – GameBegins

+0

Вы включили это в свой вопрос, но это не сохраняет данные. Чтобы сохранить данные с помощью Core Data, вам необходимо вызвать '- [NSManagedObjectContext save:]'. –

ответ

1

Вы должны сохранить данные после вставки его в МОС:

NSError *error; 
[_managedObjectContext save:&error]; 

Кроме того, почему вы используете ключ-значение кодирования, когда вы уже создали NSManagedObject подклассы? Вы можете написать с помощью точечной нотации и избежать ошибок:

commonEvent.commonNumber = number; 
commonEvent.commonName = name; 

Кроме того, в вашем коде вы объявляете event и никогда не инициализировать его. Конечно, это будет 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];