Comments 13
Для тех, кто хочет воспользоваться готовым решением, есть MagicalRecord.
+2
Неистово плюсую. Одна строка на всю инициализацию стека — это круто. Сохранение данных выховом одного метода с параметром-блоком — ещё круче. Импорт данных из JSON тоже удачно дополняет общую картину. Многопоточность разруливается очень хорошо.
0
Забыл отметить, спасибо, добавил.
0
UFO just landed and posted this here
Если элементов настолько много, что начинает тормозить UI на удалении, то проще на выходе уходить в другой поток, брать с него контекст, фетчить ненужные объекты и удалять их.
0
Можно не сохранять контекст например.
0
Вот ещё очень удобная обёртка для Core Data: NLCoreData. Не тяжёлая, по сути тот же Core Data + категории + многопоточность.
0
Я только начинаю работать с CoreData и возник такой вопрос по статье: Если я делаю запрос из CoreData, то его следует делать только через daddyManagedObjectContext?
Пример:
NSArray *result = [daddyManagedObjectContext executeFetchRequest:request
error:&error];
Пример:
NSArray *result = [daddyManagedObjectContext executeFetchRequest:request
error:&error];
0
Не нужно обращаться к какому-то конкретному контексту внутри CoreDataManager, пользователь этого мини-фреймворка должен сам решить какой контекст для запроса ему использовать.
Можно написать в 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]
0
Sign up to leave a comment.
Многопоточная Core Data