Как стать автором
Обновить
7
0
Азиз Латипов @Naftic

iOS/Ruby Software Developer

Отправить сообщение
Да, без использования констраинтов для расчета. Получается в разы быстрей.
Оно долго считает, если ячейки сложные. Так или иначе, приходится в ручную считать.
Без обид, но тут одна вода. Никакой конкретики. Затрагивается идея что нужна некая теория и все. При желании за два года работы в QA можно было бы выработать хотя бы наиболее общие правила. Для тестирования создано множество инструментов, хотя они и требуют программирования (если речь идет о тестировании ПО). В других областях есть госты, от которых можно отталкиваться. Как-то не серьезно все ваши доводы выглядят и не содержат какой-то новизны. Да в QA очень часто берут просто чтоб по кнопочкам тыкал… Ну и?
На сколько я знаю, через autolayout — считает очень медленно при сколь-нибудь сложном устройстве ячеек.

Я правда не очень понимаю, что означает
Уже давно считают высоту ячейки через AutoLayout.

Ведь для этого ячейка должна быть создана, а высоту нужно передать до создания ячейки…
По правде, я не использовал FMDB и интересно извещает ли он об изменениях. То есть, допустим я сделал селект всех продуктов, перешел на другой скрин и там добавил новый продукт. В первый TableView мне придет извещение, что данные изменились и их надо забрать?
Да, просто SQL запрос в CoreData сделать не получится. Но дело не только в этом.

В CoreData есть такая замечательная пара классов как NSFetchedResultsController и UITableViewController. Они очень оптимизированы и удобны в использовании. Так например, даже если в результате выполнения запроса мы получаем миллион записей, то FetchedResultsController загрузит в память только ту часть, которая видна из TableView. Если где-то в другом контроллере кто-то добавит, удалит или изменит содержимое отображаемых данных, то FRC автоматически стянет измененные данные в TableView с использованием приятных глазу анимаций.
Это вместо NSFetchRequest-а. Упомянутый вами request полностью эквивалентен

NSFetchRequest *fetchRequest = [[ALFetchRequest alloc] init];
fetchRequest.managedObjectContext = managedObjectContext;

NSString *entityName = @"Product";
NSEntityDescription *entity = [NSEntityDescription entityForName:entityName inManagedObjectContext:managedObjectContext];

[fetchRequest setEntity:entity];
[fetchRequest setIncludesPendingChanges:YES];

// sum amount
NSExpression *fieldExp1 = [NSExpression expressionForKeyPath:@"amount"];
NSExpression *agrExp1 = [NSExpression expressionForFunction:agr arguments:@[fieldExp]];
NSExpressionDescription *resultDescription1 = [[NSExpressionDescription alloc] init];
NSString *resultName1 = @"sumAmount";
[resultDescription1 setName:resultName1];
[resultDescription1 setExpression:agrExp1];
[resultDescription1 setExpressionResultType:NSInteger64AttributeType];

// average price
NSExpression *fieldExp2 = [NSExpression expressionForKeyPath:@"price"];
NSExpression *agrExp2 = [NSExpression expressionForFunction:agr arguments:@[fieldExp]];
NSExpressionDescription *resultDescription2 = [[NSExpressionDescription alloc] init];
NSString *resultName2 = @"sumAmount";
[resultDescription2 setName:resultName2];
[resultDescription2 setExpression:agrExp2];
[resultDescription2 setExpressionResultType:NSInteger64AttributeType];

// country
NSDictionary *availableKeys = [entity attributesByName];
NSAttributeDescription *country = [availableKeys valueForKey:@"country"];

fetch.propertiesToFetch = [NSArray arrayWithObjects:country, resultDescription1, resultDescription2, nil];
fetch.propertiesToGroupBy = [NSArray arrayWithObject:country];
fetch.resultType = NSDictionaryResultType;

NSError *error;
NSManagedObjectContext *managedObjectContext = self.managedObjectContext;
NSArray *fetchedObjects = [managedObjectContext executeFetchRequest:self error:&error];
if (!fetchedObjects || error) {
    NSLog(@"Error: Execution of the fetchRequest: %@, Failed with Description: %@",self,error);
}
return fetchedObjects;


Но читать его легче, на мой взгляд.
2

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность