-1

在我的項目中,我在具有相同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); 
} 
+0

你提的問題是很難理解:如果你把它更簡潔

CommonEvent *event = fetchedObjects.count ? fetchedObjects[0] : nil; 

您的代碼會更容易閱讀。但是,我沒有看到任何在您發佈的代碼中的任何地方保存數據的調用。 –

+0

對不起......我正在使用以下代碼將數據保存在覈心數據中。 CommonEvent * commonEvent =(CommonEvent *)[NSEntityDescription insertNewObjectForEntityForName:@「CommonEvent」inManagedObjectContext:_managedObjectContext]; [commonEvent setValue:number forKey:@「commonNumber」]; [commonEvent setValue:name forKey:@「commonName」]; – GameBegins

+0

你在你的問題中包括了這一點,但不保存任何數據。要使用核心數據保存數據,您需要調用' - [NSManagedObjectContext save:]'。 –

回答

1

你必須將其插入後保存數據到商務部:

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

另外,爲什麼您使用的,當你已經創建NSManagedObject子鍵 - 值編碼?你可以用點符號編寫和避免錯誤:

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

而且,在你的代碼你聲明event從不初始化。當然這將是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]; 
相關問題