Создание сложной сортировки в модели данных Swift Core [duplicate]

Почти, Jean-Sébastien . Все выглядит идеально, но в прошлом месяце. Это не отображается.

Ваше решение немного изменилось:

fig, ax = plt.subplots()

# Draw high and low temperatures lines:
plt.plot(x, y1, color = '#c83c34')
plt.plot(x, y2, color = '#28659c')

# Fill area between lines:
plt.gca().fill_between(x,
                       y2, y1,
                       facecolor='#daecfd',
                       alpha=0.5)

# Force major ticks on a monthly time scale only:
locator = mpl.dates.MonthLocator()
ax.xaxis.set_major_locator(locator)

# Hide major labels and set axis limits:
ax.set_xticklabels([])
ax.tick_params(axis='both', direction='out')
ax.axis(xmin=datetime.datetime(2014, 1, 1),
        xmax=datetime.datetime(2014, 12, 31),
        ymin=-50, ymax=50)

labels = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
          'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']

mticks = ax.get_xticks()
ax.set_xticks((mticks[:-1]+mticks[1:])/2, minor=True)
ax.tick_params(axis='x', which='minor', length=0)
ax.set_xticklabels(labels, minor=True)

plt.show()

Я получил этот график:

Есть ли какие-нибудь подсказки о том, что необходимо включить декабрь в метки по оси x? Во всяком случае, очень.

7
задан Matthew Picioccio 6 December 2012 в 21:31
поделиться

2 ответа

(Из комментариев:)

Запрос на выборку для хранилища Core Data (на основе SQLite) не может использовать дескрипторы сортировки на основе переходных атрибутов или предикатов на основе Objective-C.

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

Кроме того, вы можете получить все объекты и отсортировать их в памяти. В этом случае вы можете использовать произвольные дескрипторы сортировки. Но это невозможно комбинировать с выбранным контроллером результатов, поэтому вам нужно будет регистрироваться для изменений в контексте управляемого объекта и при необходимости перезагрузить таблицу.

13
ответ дан Martin R 22 August 2018 в 16:19
поделиться

Я обнаружил проект ggub BSFetchedResultsController github , который является подклассом NSFetchResultsController, который делает то, что Мартин предложил в том, что он сортируется в памяти с использованием произвольного дескриптора сортировки, кроме того, он также регистрирует изменения в контексте и вычисляет любые индекс снова изменяется с учетом произвольного дескриптора сортировки. В целом очень впечатляющий подвиг! Я успешно использовал его для сортировки по расстоянию следующим образом:

BSFetchedResultsController* fetchedResultsController = [[BSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:nil cacheName:nil];

//  create a location to compare distance to, e.g. current location
CLLocation* sourceLocation = [[CLLocation alloc] initWithLatitude:55.87595153937809 longitude:-4.2578177698913855];

// compare the distance from both to the source location
fetchedResultsController.postFetchComparator= ^(id a, id b) {
    Venue* v1 = (Venue*)a;
    Venue* v2 = (Venue*)b;

    double d1 = [v1.coreLocation distanceFromLocation:sourceLocation];
    double d2 = [v2.coreLocation distanceFromLocation:sourceLocation];

    return [@(d1) compare:@(d2)];
};

NSError *error = nil;
if (![fetchedResultsController performFetch:&error]) {
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
}

С момента своего старого проекта у него нет ARC, поэтому, когда вы включаете два файла, помните, чтобы отмечать .m с помощью флагов компилятора - fno-objc-arc в Target, Build Phases. Также имейте в виду, что разработчик считает, что код не готов к производству, поэтому обязательно используйте соответствующее тестирование.

В моем коде выше у меня есть переходное свойство coreLocation на моем подклассе объекта управляемого объекта, вы можете видеть как это сделать здесь . Кроме того, расчет расстояний неэффективен, вам может понадобиться кэшировать расстояние в объекте, а не переучитывать его при каждом сравнении.

Наконец, похоже, что этот проект возник из-за вопроса о создателе Daniel Thorpe's Stackoverflow он остался без ответа, заставив его решить проблему и сам отправил единственный ответ, поэтому я думаю, что если вы найдете полезный его проект, вы можете любезно опубликовать свой пост , как и я.

0
ответ дан Community 22 August 2018 в 16:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: