2010-09-16 70 views
2

說我有NSManagedObject A,它與NSManagedObject B有多對多的關係。 我有一個保存的A和B實例。 )核心數據:如何在一個關係中保存兩次對象

現在我想讓A在關係中保存兩次B的實例,這當然是一個集合。 雖然,由於它的一個設置它存儲B的僅一個參考

參見:(未語法選中)

NSArray *tmpArray = [NSArray arrayWithObjects: B1, B1, nil]; 
[A setB: [NSSet setWithArray: tmpArray]]; 

- >只有一個B被存儲在關係..

是有可能跟蹤B的?

+0

TechZen是正確的。 100%同意。 所以問題是:你試圖解決什麼問題,這讓你認爲你需要存儲對象A和B1之間的關係兩次?如果你能解釋這一點,我們可能會建議你如何以另一種方式實現你的目標。 – 2011-10-07 07:07:01

回答

4

你不能這樣做。核心數據不是維護一個數組,而是一個對象圖。

對象圖存儲對象之間的關係。由於每個對象都是唯一的,因此不存在任何信息就沒有重複關係。假設您有一個對象Person實例Jane,它具有包含三個對象Steve,JohnMikebrothers關係。如果有兩個關係到Steve,因爲真正的史蒂夫認爲對象模型不是簡的兄弟兩次,這在邏輯上是荒謬的。即使簡確實有兩個兄弟叫史蒂夫,他們仍然是個別的人,需要他們自己的對象來代表他們在對象圖中。

如果您發現自己認爲需要重複關係,那麼您可能誤解了有關對象圖的工作方式。

+0

現貨! – 2012-05-27 14:48:33

1

我有一個類似的問題,搜查但找不到任何東西。事實上,我正在錯誤地思考這種關係。

這個應用程序安排了一堆Items在一個Board按順序重複。

EX。做A,做B,做C,做A再做,做D

我創建了一個很好的老式連接表,其中Item,Board和董事會職位BoardItemPositon

Board實體中,您可以隱藏所有連接表的混亂狀態並獲取並設置數組。

@implementation Board 

@dynamic boardItems; 

- (void)setItems:(NSArray *)items{ 
    //the ordered set of links 
    NSMutableOrderedSet *boardItemSet = [NSMutableOrderedSet new]; 
    int i = 1; 
    for (Item *item in items) { 
     BoardItemPosition *boardItemPosition = (BoardItemPosition *)[NSEntityDescription insertNewObjectForEntityForName:@"BoardItemPosition" 
                            inManagedObjectContext:[self managedObjectContext]]; 
     NSNumber *num = [NSNumber numberWithInt:i++]; 
     [boardItemPosition setItemPosition:num]; 
     [boardItemPosition setItem:item]; 
     [boardItemSet addObject:boardItemPosition]; 
    } 

    //delete the old links 
    for (BoardItemPosition *boardItemPosition in [self boardItems]) { 
     [self.managedObjectContext deleteObject:[self.managedObjectContext objectWithID:boardItemPosition.objectID]]; 
    } 

    //set the new links 
    [self setBoardItems:boardItemSet]; 
} 

- (NSArray *)items{ 
    //pull out item and add to array 
    NSMutableArray *itemArray = [NSMutableArray new]; 
    for (BoardItemPosition *boardItemPosition in [self boardItems]) { 
     [itemArray addObject:[boardItemPosition item]]; 
    } 
    return itemArray; 
} 
相關問題