Как использовать groupBy с MagicalRecord?

Я застрял в том, как использовать groupBy с MagicalRecord.

У меня есть список стран, где есть места проведения

Country -<< Venues

Мне нужно сгруппировать все заведения по странам и отсортировать страны по названию.

Но я не знаю, как это сделать с помощью MagicalRecord.

Я пробовал использовать NSFetchedController, но иногда он вылетает, говоря, что массив равен нулю или нулевой длине.

В других случаях он видит только одну категорию, когда их несколько.

Наконец, я не уверен, как выполнить выборку объекта.

ie;

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    _objects = [NSMutableArray array];

    self.fetchedResultsController = [self fetchedResultsController];
    [Venue performFetch:self.fetchedResultsController];

// At this point how do I make the Venue findAllSortedBy work on the performFetch?
        _objects = [NSMutableArray arrayWithArray:[Venue findAllSortedBy:@"name" ascending:YES inContext:[NSManagedObjectContext defaultContext]]];

        self.title = @"Venues";

    }


    - (NSFetchedResultsController *)fetchedResultsController {
        if (!fetchedResultsController) {
            fetchedResultsController = [Venue fetchAllSortedBy:@"name"
                                                            ascending:YES
                                                        withPredicate:nil
                                                              groupBy:@"country"
                                                             delegate:self];
        }

        return fetchedResultsController;
    }

-(NSString*)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section   {
    NSLog(@"Section = %d", section);

    id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section];
    NSLog(@"sectionInfo = %@", sectionInfo);

    return @"Header";
}

- (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tv dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
    }

    [self configureCell:cell atIndexPath:indexPath];

    return cell;
}

- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath {
    Venue *v = [_objects objectAtIndex:indexPath.row];
    cell.textLabel.text = v.name;
}

Я не уверен, правильно ли я это делаю.

Вышеупомянутое поместит все в 1 страну (когда их несколько), и журнал будет сообщать;

CoreData: ошибка: (NSFetchedResultsController) Раздел вернул нулевое значение для пути ключа имени раздела «страна». Объекты будут помещены в безымянный раздел

Кажется, не видно разных стран, и я не думаю, что правильно выполнил команду GroupBy.

Итак, как мне выполнить команду GroupBy с MagicalRecord?

Большое спасибо.


person zardon    schedule 05.09.2013    source источник


Ответы (1)


Эта ошибка сообщает вам, что из всех ваших объектов Venue в вашем результирующем наборе есть хотя бы один, для которого не задано значение «страна». Перед загрузкой необходимо убедиться, что вы действительно заполняете это поле и правильно его сохраняете.

И, к вашему сведению, в вашем методе viewDidLoad вам не нужен весь этот код. Просто сделайте что-нибудь вроде:

- (void) viewDidLoad;
{
    [super viewDidLoad];
    self.fetchedVenues = [Venue fetchAllSortedBy:@"name" ascending:YES withPredicate:nil groupBy:@"country" delegate:self];
}

fetchAllSortedBy ... будет выполнять выборку за вас, регистрировать ошибки и т. д. В этом суть вспомогательного фреймворка, такого как MagicalRecord.

person casademora    schedule 05.09.2013
comment
Отношения между страной и местом проведения не удалось должным образом сохранить, но с вашей помощью это произошло. Я не был уверен, должен ли я делать весь этот код или нет, но я рад, что меня поправили, поскольку я все еще изучаю MagicalRecord. - person zardon; 05.09.2013