2013-11-24 77 views
0

我有三個表。表運行,引腳和註釋。它們之間的關係是:MagicalRecord保存數組與關係

1運行ň針

1針N注

我想更新運行,插入一個引腳(指向運行),並插入N筆記(指向Pin)。而且,當用戶轉到另一個屏幕時,我會看到插入的引腳的註釋。但是,我的問題是隻返回一個音符。所以,我不知道錯誤是在Update/Insert方法還是在find方法上。我嘗試了很多不同的方式來做到這一點,但他們中的任何一個都解決了我的問題。

插入/更新:

[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) { 
    // Get current Run 
    Run *runDb = (Run*) [localContext objectWithID:self.idRun]; 

    //Create a pin 
    Pin *newPin = [Pin MR_createInContext:localContext]; 
    [newPin setSt_description:self.txtName.text]; 
    [newPin setRun: runDb]; 
    /* Set latitude & longitude */ 
    newPin.dec_latitude = (NSDecimalNumber *)[NSDecimalNumber numberWithDouble:currentLocation.coordinate.latitude]; 
    newPin.dec_longitude = (NSDecimalNumber *)[NSDecimalNumber numberWithDouble:currentLocation.coordinate.longitude]; 


    /* Update run, incrementing total pins*/ 
    int pins = [runDb.int_total_pin intValue]; 
    NSNumber *pinsN = [NSNumber numberWithInt:pins+1]; 
    [runDb setInt_total_pin:pinsN]; 

    for (int i=0; i<[notes count]; i++) { 
     Note *note = [Note MR_createInContext:localContext]; 
     [note setSt_note:[[notes objectAtIndex:i] st_note]]; 
     [note setPin:newPin]; 
    } 

} completion:^(BOOL success, NSError *error) { 
    if(!success) 
     NSLog(@"%@", error); 
}]; 

查找方法(GET針的所有音符)

-(NSArray*) getNotesFromPin:(NSManagedObjectID*) pinId{ 
    NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"pin == %@", pinId];  
    //Return notes from pin 
    return [Note MR_findAllWithPredicate:predicate1]; 

} 

在日誌中,我可以看到MagicalRecord被插入5個對象( 3筆記,1筆和1筆):

NSManagedObjectContext(MagicalRecord) MR_contextWillSave:](0xba9ba70) Context BACKGROUND SAVING (ROOT) is about to save. Obtaining permanent IDs for new 5 inserted objects 
2013-11-24 19:24:28.103 MyProject[35447:1ea1b] __70-[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:]_block_invoke_021(0xba9ba70) → Finished saving: <NSManagedObjectContext (0xba9ba70): *** BACKGROUND SAVING (ROOT) ***> on *** BACKGROUND THREAD *** 

回答

0

它看起來像您建模注和腳像這樣:

Note <-> Pin 

也就是說,一比一的關係。嘗試查看您的模型,並將Pin.note更改爲一對多。這也意味着你必須改變這個剪輯看起來像這樣:

for (int i=0; i<[notes count]; i++) { 
    Note *note = [Note MR_createInContext:localContext]; 
    [note setSt_note:[[notes objectAtIndex:i] st_note]]; 
    [newPin addNode:note]; 
} 
+0

Pin.note是1-1,我改變了1-N。注意事項是1-1(是正確的)。但是,注意必須指向Pin,不是嗎?我必須實施addNote方法?因爲我試圖這樣做時出現錯誤:由於未捕獲的異常'NSInvalidArgumentException'而終止應用程序,原因:' - [Note intersectsSet:]:使用[note setPin:newPin]發送到實例0x9da5f80' –

+0

'的無法識別的選擇器和您的提示改變關係作品!謝謝!! –