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