2013-11-24 5 views
0

У меня есть три таблицы. Стол Run, Pin и Note. Отношения между ними являются:MagicalRecord сохранить массив с отношением

1 Run N Pin

1 Pin N Примечание

Я пытаюсь обновить Выполнить, вставьте один Pin (указывает на Run) и вставить N Примечания (указывая на Pin). И когда пользователь переходит на другой экран, я получаю ноты вставленного булавки. Но, моя проблема заключается в том, что возвращается только одна заметка. Итак, я не знаю, является ли ошибка в методе Update/Insert или методе find. Я пробовал много разных способов сделать это, но любой из них решил мою проблему.

Insert/Update:

[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); 
}]; 

Найти метод (Получить все ноты булавкой)

-(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

Похоже, вы смоделировали записку и Pin так:

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, I changed for 1-N. Note.pin равно 1-1 (правильно). Но, обратите внимание, нужно указать на Пин, а не? Я должен реализовать метод addNote? Потому что я получаю сообщение об ошибке при попытке сделать это: Завершение приложения из-за неотображенного исключения «NSInvalidArgumentException», причина: «- [note intersectsSet:]: непризнанный селектор, отправленный экземпляру 0x9da5f80 ' –

+0

с использованием [note setPin: newPin] и вашего наконечника изменить отношения работает! Благодаря!! –

Смежные вопросы