Основные данные - для многих Reationships - возникли проблемы с наборами - PullRequest
0 голосов
/ 17 ноября 2011

Я искал что-то похожее, но безуспешно, поэтому я попытаюсь объяснить мою проблему и вставить некоторый код.У меня есть приложение, которое использует Core Data, и я могу сохранять и извлекать данные из соответствующих им текстовых полей, за исключением моего (ко многим отношениям).Я считаю, что они сохраняются и возвращаются как наборы при получении.Я прочитал о NSSet и посмотрел на некоторый код, но все еще не понимаю, как его кодировать.

Спасибо за любую помощь.Hudson

- (IBAction) findContact
{
AppDelegate *appDelegate = [[UIApplication sharedApplication]delegate];
NSManagedObjectContext *context = [appDelegate managedObjectContext];

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Place" 
                                              inManagedObjectContext:context];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc]init];
[fetchRequest setEntity:entity];
NSPredicate *pred = [NSPredicate predicateWithFormat:@"placeName = %@", placeName.text];
[fetchRequest setPredicate:pred];
Place *matches = nil;
NSError *error;
NSArray *objects = [context executeFetchRequest:fetchRequest error:&error];
if ([objects count] == 0) {
    status.text = @"No matches";
}else{

    matches = [objects objectAtIndex:0];
    address.text = [matches valueForKey:@"address"];
    city.text = [matches valueForKey:@"city"];
    state.text = [matches valueForKey:@"state"];
    zip.text = [matches valueForKey:@"zip"];
    phone1.text = [matches valueForKey:@"phone1"];
    email.text = [matches valueForKey:@"email"];
    website.text = [matches valueForKey:@"website"];
    phone2.text = [matches valueForKey:@"phone2"];
    about.text = [matches valueForKey:@"about"];
    photoName.text = [[matches photo]valueForKey:@"photoName"];
    status.text = [NSString  stringWithFormat:@"%d matches found", [objects count]];
    NSSet *groupForSections = [groupForSections valueForKey:@"sections"];
    for (Group *group in groupForSections) {
        NSLog(@"group name = %@", [groupForSections valueForKey:@"groupName"]);
        groupName.text = [group valueForKey:@"groupName"];
    NSSet *sectionForPlaces = [sectionForPlaces valueForKey:@"places"];
    for (Section *section in sectionForPlaces) {
        sectionName.text = [section valueForKey:@"sectionName"];
        NSLog(@"section name = %@", [section valueForKey:@"sectionName"]);
        }
    }
    }
    }

! [Введите описание изображения здесь] [1]

1 Ответ

0 голосов
/ 17 ноября 2011

Согласно вашим последующим комментариям, Place фактически не имеет отношения ко многим с Разделом, а у Section фактически нет отношения ко многим с Группой. Вместо этого у Группы есть отношение ко многим (разделы) с Разделом, а обратное отношение раздела к 1 называется группой. Кроме того, у Раздела есть отношение (ко многим) (местам) с отношением Место и Место, обратное к -1, называется разделом.

Если все эти предположения верны (и, не видя вашу модель, трудно понять, верна ли она), ваш код должен выглядеть примерно так:

NSManagedObject *sectionForPlace = [matches valueForKey:@"section"]; 
sectionName.text = [sectionForPlace valueForKey:@"sectionName"];

NSManagedObject *groupForSection = [sectionForPlace valueForKey:@"group"];
gromName.text = [groupForSection valueForKey:@"groupName"];

Этот код не имеет прямого доступа к полям через созданные вами классы NSManagedObject, которые также должны работать, если вы предпочитаете этот способ.

...