Pull to refresh

Comments 13

Неистово плюсую. Одна строка на всю инициализацию стека — это круто. Сохранение данных выховом одного метода с параметром-блоком — ещё круче. Импорт данных из JSON тоже удачно дополняет общую картину. Многопоточность разруливается очень хорошо.
Плюс ко всему запросы findAll, findFirst в стиле Rails.
Забыл отметить, спасибо, добавил.
UFO just landed and posted this here
Если элементов настолько много, что начинает тормозить UI на удалении, то проще на выходе уходить в другой поток, брать с него контекст, фетчить ненужные объекты и удалять их.
UFO just landed and posted this here
Вы уверены, что в Вашем случае оправдано в качестве модели использовать NSManagedObject вместо NSObject?
Можно не сохранять контекст например.
Вот ещё очень удобная обёртка для Core Data: NLCoreData. Не тяжёлая, по сути тот же Core Data + категории + многопоточность.
Я только начинаю работать с CoreData и возник такой вопрос по статье: Если я делаю запрос из CoreData, то его следует делать только через daddyManagedObjectContext?
Пример:
NSArray *result = [daddyManagedObjectContext executeFetchRequest:request
error:&error];
Не нужно обращаться к какому-то конкретному контексту внутри CoreDataManager, пользователь этого мини-фреймворка должен сам решить какой контекст для запроса ему использовать.

Можно написать в CoreDataManager небольшой хэлпер:

- (NSManagedObjectContext*)getCurrentThreadContext{
    NSManagedObjectContext *result = nil;
    
    if ([NSThread isMainThread])
        result = _defaultManagedObjectContext;
    else
        result = [self getContextForBGTask];
    
    return result;
}


И метод для фетча:

- (NSArray*)getObjectsOfType:(NSString*)type
         withSortDescriptors:(NSArray*)descriptors
                andPredicate:(NSPredicate*)predicate
                   inContext:(NSManagedObjectContext *)context {
    NSFetchRequest* request = [[NSFetchRequest alloc] init];
    [request setReturnsObjectsAsFaults:NO];
    
    NSEntityDescription* desc = [NSEntityDescription entityForName:type inManagedObjectContext:context];
    [request setEntity:desc];
    
    if (descriptors)
		[request setSortDescriptors:descriptors];
    
    if (predicate)
		[request setPredicate:predicate];
    
    NSError* error = nil;
    NSArray* result = nil;
    result = [context executeFetchRequest:request error:&error];
    
	if ((result == nil) || (error != nil))
		return nil;
    
	return result;
}


Тогда вызов из любого участка кода будет сводиться к следующему:

NSManagedObjectContext *context = [[CoreDataManager sharedManager] getCurrentThreadContext];
NSArray *result = [[CoreDataManager sharedManager] getObjectsOfType:@"Car"
                                         withSortDescriptors:nil
                                                andPredicate:nil
                                                   inContext:context]
Sign up to leave a comment.

Articles