Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование iOS/iPhone
Войти
Регистрация
Восстановить пароль
 
13Ori31
1 / 1 / 0
Регистрация: 11.03.2013
Сообщений: 43
#1

core data запрос на получение суммы атрибута, всех записей - Программирование iOS

26.08.2013, 15:19. Просмотров 852. Ответов 5
Метки нет (Все метки)

Привет, есть сущность продукция имеющая свои атрибуты один из них цена,
Есть н продукций нужно найти сумму всех цен
Для этого я использую вот такого вида запрос…

Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
-(void)sum{
NSFetchRequest *request = [[NSFetchRequest alloc] init];
 
    [request setEntity:[NSEntityDescription entityForName:@"Product" 
                            inManagedObjectContext:self.managedObjectContext]];
    
    
    
    [request setResultType:NSDictionaryResultType];
    
    
    
    NSExpression *keyPathExpression = [NSExpression expressionForKeyPath:@"Price"];
    
        
    NSExpression *sumExpression = [NSExpression
                                   expressionForFunction:@"sum:" arguments:[NSArray arrayWithObject:keyPathExpression]];
    
 
    NSExpressionDescription *expressionDescription = [[NSExpressionDescription alloc] init];
    
 
    
    [expressionDescription setName:@"sum"];
    [expressionDescription setExpression:sumExpression];
    [expressionDescription setExpressionResultType:NSInteger32AttributeType];
    
[request setPropertiesToFetch:[NSArray    arrayWithObject:expressionDescription]];
    
    
    
    // Выполнение запроса.
    
    NSError *error = nil;
    NSArray *a =[[NSArray alloc] initWithArray: [self.managedObjectContext executeFetchRequest:request error:&error]];
    
    NSLog(@"%@",[a objectAtIndex:0]);
    
    [expressionDescription release];
    [request release];
}
когда у меня товар есть один и цена его 23
nslog выведет мне словарь
{
sum = 23;
}
когда я дальше удалю его и запущу заново приложение то выводит тоже самое хотя товара уже нет вообще)

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

Удаляю товар вот таким образом

Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
- (void)tableView:(UITableView *)tableView
commitEditingStyle:(UITableViewCellEditingStyle)editingStyle
forRowAtIndexPath:(NSIndexPath *)indexPath
{
  
    if (editingStyle == UITableViewCellEditingStyleDelete) {
[self.managedObjectContext deleteObject:[self.arrayIntem objectAtIndex:indexPath.section]];
    
        [self.managedObjectContext save:nil];
        
        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
                         withRowAnimation:UITableViewRowAnimationTop];
       [self.tableView reloadData];
 
    }
}
подскажите что я могу делать не так

Добавлено через 21 минуту
нет удоляю вот так)
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
- (void)tableView:(UITableView *)tableView
commitEditingStyle:(UITableViewCellEditingStyle)editingStyle
forRowAtIndexPath:(NSIndexPath *)indexPath
{
  
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        if([[[[self.arrayIntem objectAtIndex:indexPath.section] product] allObjects] count]>1){
           
            [self.managedObjectContext deleteObject:[[[[self.arrayIntem objectAtIndex:indexPath.section] product] allObjects] objectAtIndex:indexPath.row] ];
        }
        else{
             [COLOR="Red"] [self.managedObjectContext deleteObject:[[[[self.arrayIntem objectAtIndex:indexPath.section] product] allObjects] objectAtIndex:indexPath.row] ];
[/COLOR]
                [self.managedObjectContext deleteObject:[self.arrayIntem objectAtIndex:indexPath.section]];
            }
        
         [self.managedObjectContext processPendingChanges];
         [self.managedObjectContext save:nil];
        
        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
                         withRowAnimation:UITableViewRowAnimationTop];
 
        [self.tableView reloadData];
 
         
    }
}
вот то что красное добавил и теперь работает)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.08.2013, 15:19
Я подобрал для вас темы с готовыми решениями и ответами на вопрос core data запрос на получение суммы атрибута, всех записей (Программирование iOS):

core data, две сущности
Привет. Есть база, в ней две сущности, предположим «факультет» и «студент»...

core data newManagedObject setValue:
Уважаемые форумчане! Возникла следующая проблема: создаю DataModel, добавляю...

Improve Core Data skills
Привет всем. Как-то так печально у меня складывался рабочий опыт, что с...

Нужно разъяснение с Core Data
Всем привет! Толи я идиот тупой, толи с возрастом соображалка перестает...

Использование Core Data в статической библиотеке
Доброго времени суток. Прошу у вас помощи в разъяснение важного мне вопроса. ...

Core Data проверка уникальности записи
Добрый вечер! Вливаюсь в CoreData потихоньку, почти все понятно, кроме вот...

5
Dan_banan_
11 / 11 / 1
Регистрация: 03.03.2013
Сообщений: 87
Записей в блоге: 1
14.09.2013, 05:01 #2
Используй фетчет конроллер и предикаты для работы с базой и выборки из нее) уж лучше бы ты кодом все посчитал. То что ты показал это сложно назвать кодом, хотя и это не самое лучшее решение
что то в духе

Objective-C
1
2
3
4
5
6
7
8
9
10
NSArray *allObjects = [self.fetchedController fetchedObject];
NSinteger price = 0;
 
for(Entitiy *entityObject in allObject)
{
    if(entityObject)
    {
         price += entityObject.price; 
    }
}
0
zulkis
684 / 611 / 43
Регистрация: 13.01.2011
Сообщений: 1,724
14.09.2013, 13:52 #3
:/ Ну вы ребята...

Objective-C
1
double price = [allObjects valueForKeyPath:@"@sum.price"];
Objective-C
1
2
3
for(Entitiy *entityObject in allObject)
{
    if(entityObject)
Предполагаете, что в массиве NSArray может быть nil?
0
Dan_banan_
11 / 11 / 1
Регистрация: 03.03.2013
Сообщений: 87
Записей в блоге: 1
16.09.2013, 00:42 #4
какой массив)) это вообще из головы я написал пример) тут не массив а перебор обьектов этого массива) эту проверку можно и не ставить заведома зная что все там хорошо с обьектами но и ее наличие ничего плохого не делает впринципе
0
Vorona
Peace 2 all shining faces
671 / 533 / 84
Регистрация: 05.03.2010
Сообщений: 1,283
16.09.2013, 01:45 #5
ну вообще лишняя проверка это как бы лишняя проверка, особенно когда вы лопатите десятки тысяч записей
наш преподаватель по ассемблеру вообще был как-то негативно настроен против всяких if

ну это так, лирическое отступление, zulkis имел ввиду, что iOS SDK не позволит вам хранить nil в массиве, потому эта проверка просто не имеет смысла
в смысле nil туда можно добавить, но если не ошибаюсь он значит конец массива и после него ничего больше не будет доступно
0
zulkis
684 / 611 / 43
Регистрация: 13.01.2011
Сообщений: 1,724
16.09.2013, 08:32 #6
Цитата Сообщение от Dan_banan_ Посмотреть сообщение
какой массив)) это вообще из головы я написал пример) тут не массив а перебор обьектов этого массива) эту проверку можно и не ставить заведома зная что все там хорошо с обьектами но и ее наличие ничего плохого не делает впринципе

Не по теме:

Не хочу никого обижать или тыкать пальцем, Но:

Как только я вижу слова "это вообще из головы я написал пример)", и при этом "пример" не верен в принципе, я думаю вы сами поймете, какой вывод можно сделать...
И в довесок:

Цитата Сообщение от Dan_banan_ Посмотреть сообщение
какой массив)) это вообще из головы я написал пример) тут не массив а перебор обьектов этого массива)
Вот у меня когнитивный диссонанс происходит при чтении такого отрывка текста, который опровергает сам себя, да еще и без знаков препинания.

0
16.09.2013, 08:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.09.2013, 08:32
Привет! Вот еще темы с решениями:

Вывод значения data-* атрибута всех элементов коллекции
Всем привет. У меня есть заголовки "h3" с текстом (синий). И есть тег "li"...

Склейка двух таблиц и получение суммы записей
Наверное из мира фантастики, но все же хочу поинтересоваться. Есть две таблицы...

Запрос на получение трёх ПОСЛЕДОВАТЕЛЬНЫХ записей с УВЕЛИЧИВАЮЩИМИСЯ ДАННЫМИ
Таблица состоит из полей (field_1, field_2, field_3 и field_4) которые являются...

Запрос на получение контрольной суммы по столбцу
Подскажите пожалуйста, как сформировать запрос на получение контрольной суммы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru