2013-10-09 50 views
0

我有兩個實體:核心數據:複製NSManagedObject使用類別

  • 票務
  • TicketResolved

兩個實體具有相同的屬性。什麼是將TicketNSManagedObject複製到TicketResolvedNSManagedObject的最有效方法?

我在想使用類別:Ticket+Copy是最便宜的方式?如果是這樣,我將不得不#importTicketTicketResolved在類別文件中。

這是我想出的,有人可以請告知,如果這是正確的方式去做。我爲每個實體使用NSManagedObjectSubclass。在Ticket+Copy

方法:

-(TicketResolved *)copyObjects:(Ticket *)ticket 
{ 
    TicketResolved *ticketResolved = [NSEntityDescription insertNewObjectForEntityForName:@"TicketResolved" inManagedObjectContext:self.managedObjectContext]; 
    ticketResolved.attribute = ticket.attribute; 
    // Assign rest of the ticketResolved attributes values this way 
    return ticketResolved; 
} 

現在調用方法

#import Ticket; 
#import Ticket+Copy; 

@implementation 
.... 
Ticket *ticket = [NSEntityDescription insertNewObjectForEntityForName:@"Ticket" inManagedObjectContext:self.managedObjectContext]; 
TicketResolved *newTicketResolved = [ticket copyObjects:ticket]; 
// 'newTicketResolved' now has all the keys/values that 'ticket' had. 

這是一個正確的做法還是有一個簡單的方法來做到這一點?

+0

也許[這種方法](http://stackoverflow.com/a/19189035/1990236)會適合你嗎? –

回答

0

感謝@Tom,我確實糾正了我在問題中的錯誤。

下面是對我工作的解決方案:

TicketResolved *ticketResolved = [NSEntityDescription insertNewObjectForEntityForName:@"TicketResolved" inManagedObjectContext:self.managedObjectContext]; 
NSArray *keys = [[[ticket entity] attributesByName] allKeys]; 
NSDictionary *dict= [ticket dictionaryWithValuesForKeys:keys]; 
[ticketResolved setValuesForKeysWithDictionary:dict]; 

上面的代碼不會複製關係的對象。爲此,我不得不使用下面的代碼:

ticketResolved.relationshipObject = ticket.relationshipObject; 
1

如果TicketTicketResolved實際上具有相同的屬性,則最有效的的選擇是:

  • 擺脫TicketResolved
  • 添加上Ticket一個布爾標誌命名爲resolved,你可以設置爲YES當票證被解決時。
  • 使用此屬性可獲取請求以獲取已解決或未解析的故障單,無論您需要什麼。

那麼你實際上並不需要複製任何數據,不做工作總比效率更高。

如果由於某種原因,您確實需要兩個具有相同屬性的獨立實體,基本上您擁有它,您需要創建一個TicketResolved實例並讓您的代碼複製每個屬性值。與您的代碼的唯一的主要問題是這樣的線路:

Ticket *ticket = [Ticket alloc]init]; 

您不能創建管理對象這樣的,因爲你不調用指定的初始化。您需要使用-[NSManagedObject initWithEntity:insertIntoManagedObjectContext:]或使用+[NSEntityDescription insertNewObjectForEntityForName:inManagedObjectContext:]

+0

謝謝湯姆。你寫的代碼是正確的。我試圖簡化我的問題,並犯了一個錯誤。 但是我做到了我試圖使用NSDictionary。我將粘貼下面的代碼。 不幸的是,要求確實有兩個獨立的實體。 – user1107173

相關問題