Форум программистов, компьютерный форум, киберфорум
Программирование iOS/iPhone
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/14: Рейтинг темы: голосов - 14, средняя оценка - 4.86
1 / 1 / 0
Регистрация: 11.03.2013
Сообщений: 43
1

Хранение данных в plist

15.07.2013, 11:18. Показов 2724. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
привет.
требуется хранить список факультетов, для каждого факультета хранить список специализаций, для каждой специализации хранить список студентов, для каждого студента некоторое количество атрибутов.
стоит ли для такой информации использовать core data или хватит просто plist???
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.07.2013, 11:18
Ответы с готовыми решениями:

Загрузка данных из plist в Master-Detail приложении
Доброго Вам времени суток, увадажемые знатоки iOS! Недавно начал изучать программирование по очень...

Хранение файлов и файловый менеджер в файле(листе) Excel, Бинарное хранение данных в CustomProperty листа Excel
Всем привет! Хочу поделится наработками, которые получились в процессе реализации своих задач. ...

Хранение данных пользователя(инф-ию,ограничений,разрешений) в Базе Данных, нужен совет
Здравствуйте, подскажите пожалуйста в какой форме лучше хранить в БД информацию о пользователях, их...

Киносеанс - хранение данных, замена данных, добавленных новых
Вообщем задача : На киносеанс популярного кинофильма осуществляетсябронирование билетов. С помощью...

18
112 / 103 / 12
Регистрация: 01.05.2013
Сообщений: 603
15.07.2013, 11:20 2
хватит многомерного словаря

В каком виде хранить объемный текст?
Быстрое обращение к данным многомерных словарей

но сразу скажу, если нужен функционал SQL запросов, то тут SQLite или CoreData без вариантов
0
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
15.07.2013, 13:02 3
plist'a достаточно. Но если студентов много и их нужно искать, могут быть проблемы с производительностью. В одном из своих первых проектов храню список примерно из 1200 записей. На 4-м айфоне задержка при поиске до полусекунды. Не слишком user friendly получается.
1
112 / 103 / 12
Регистрация: 01.05.2013
Сообщений: 603
16.07.2013, 08:40 4
В одном из своих первых проектов храню список примерно из 1200 записей
поиск через предикаты или через цикл? просто интересно.
0
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
16.07.2013, 11:56 5
Цикл
1
112 / 103 / 12
Регистрация: 01.05.2013
Сообщений: 603
16.07.2013, 14:11 6
Цикл
ok
0
686 / 613 / 43
Регистрация: 13.01.2011
Сообщений: 1,722
16.07.2013, 14:14 7
Цитата Сообщение от mobidevelop Посмотреть сообщение
plist'a достаточно. Но если студентов много и их нужно искать, могут быть проблемы с производительностью. В одном из своих первых проектов храню список примерно из 1200 записей. На 4-м айфоне задержка при поиске до полусекунды. Не слишком user friendly получается.
Поиск Должен производится асинхронно, Вы что
0
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
16.07.2013, 14:17 8
zulkis, как можно... Приложение, конечно, одно из первых для айфона, но ведь не первое же в жизни! Само собой, он асинхронен. Но результаты-то все равно не сразу появляются. А это печалит. Не сильно, но печалит...
0
686 / 613 / 43
Регистрация: 13.01.2011
Сообщений: 1,722
16.07.2013, 14:20 9
Цитата Сообщение от mobidevelop Посмотреть сообщение
zulkis, как можно... Приложение, конечно, одно из первых для айфона, но ведь не первое же в жизни! Само собой, он асинхронен. Но результаты-то все равно не сразу появляются. А это печалит. Не сильно, но печалит..
А например разбиение списка на "много" списков например в алфавитном порядке не пробовали? Должно помочь...
Хотя смотря по какому критерию поиск.
0
112 / 103 / 12
Регистрация: 01.05.2013
Сообщений: 603
16.07.2013, 14:24 10
как выше сказано, приложение использует цикл для поиска, в случае использования предикатов скорость поиска укорилась бы минимум в 2 раза.
0
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
16.07.2013, 14:25 11
По вложению поиск. Не прокатит. Да и не буду я это приложение обновлять. Не далее, как сегодня получил забавный ответ от ревьюиэров на приложение, очень похожее на сабж.

Books should be submitted to the iBookstore. To work with Apple on iBookstore distribution, first verify that your content meets the following requirements:

- ISBNs are required for all paid titles you intend to distribute
- Is in either:
- EPUB format, passing EpubCheck 1.0.5
- Multi-Touch format, created by US ISBN Agency. Then complete the iTunes Connect Online Application.

Note: An ISBN is not required if you have a free book agreement and choose to offer your book free on the iBookstore.

Если не удастся доказать, что моя книжка не просто книжка, серию придется прикрыть
0
686 / 613 / 43
Регистрация: 13.01.2011
Сообщений: 1,722
16.07.2013, 14:31 12
Цитата Сообщение от noname_club Посмотреть сообщение
как выше сказано, приложение использует цикл для поиска, в случае использования предикатов скорость поиска укорилась бы минимум в 2 раза.
Каким образом вычислили?

Правда интересно. Где почитать?
0
112 / 103 / 12
Регистрация: 01.05.2013
Сообщений: 603
16.07.2013, 14:38 13
Каким образом вычислили?

Правда интересно. Где почитать?
опровергаете? или что?
0
686 / 613 / 43
Регистрация: 13.01.2011
Сообщений: 1,722
16.07.2013, 15:13 14
Цитата Сообщение от noname_club Посмотреть сообщение
опровергаете? или что?
Да не опровергаю, интересно как так посчитали? Я не смог инфу найти по работе NSPredicate в выборке. Вот спросил - раз есть такая оценка, должна же она откуда то высчитаться...
Мб источники какие напишите, откуда почитать можно?
0
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
16.07.2013, 20:13 15

Не по теме:

У нас в клубе принято джентльменам верить на слово.
[URL="http://www.youtube.com/watch?v=c-5MfJYpUk8"]Чокнутые


Я вот тоже сомневаюсь в такой бешеной производительности. Даже наоборот, подозреваю, что в случае, если в массиве хранятся не строки, а объекты, у которых нужно проверить строковое свойство (как в моем случае), предикаты будут притормаживать из-за необходимости работать со структурой объекта. Полную ясность может внести только эксперимент, но мне честно лень его проводить.
0
1 / 1 / 0
Регистрация: 11.03.2013
Сообщений: 43
17.07.2013, 11:58  [ТС] 16
Привет.
выбрал для себя я core data.
Подсмотрел пример «Раскрывающаяся таблица» с сайта Imaladec, только там данные из NSDictionary и попробовал
реализовать вывод данных из Двух связанных между собой сущностей Факультет(А) и Студент(Б), связь между ними “А
один ко многим Б“ в TableView с раскрывающимися секциями(кнопки с названием факультета).
При нажатии на секцию добавляться строки с Фамилиями студентов в таблицу, под нажатой секцией.
Вот что у меня получилось.
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
 
 
//получаю из базы arrayIntem - массив каждый элемент которого запись из сущности "фокул." и
// с вязаные с ней записи сущности "студ".    isOp -  массив выполняющий роль флагов для каждой
// секции(открыта или закрыта)
(void)viewDidLoad
{
[super viewDidLoad];
 NSError *error = nil;
    AppDelegate *a=[[AppDelegate alloc] init];
    self.managedObjectContext= a.managedObjectContext;
    [a release];
 
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:[NSEntityDescription entityForName:@"Fokl" 
                    inManagedObjectContext:managedObjectContext]];
 
self.arrayIntem = [NSMutableArray arrayWithArray:[managedObjectContext executeFetchRequest:fetchRequest
                                                                          error:&error] ];
 
isOp=[[NSMutableArray alloc] init];
    for (int i=0;i<[arrayIntem count];i++){
    
        [isOp addObject:[NSNumber numberWithInt:0]];
    }
}
 
 
//добовляеться кнопка в облость секции
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    
    
    NSString *sectionTitle = [[arrayIntem objectAtIndex:section] name];
    BOOL isOpen = [[isOp objectAtIndex:section] boolValue];
    NSString *arrowNmae = isOpen? @"arrowUp":@"arrowDown";
    
    
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    button.frame = CGRectMake(0.0f, 0.0f, 320.0f, 50.0f);
    button.tag = section;
    button.backgroundColor=[UIColor blackColor];
    [button setContentHorizontalAlignment:1];
    
    [button setTitle:sectionTitle
            forState:UIControlStateNormal];
    
    [button addTarget:self
               action:@selector(didSelectSection:)
     
     forControlEvents:UIControlEventTouchUpInside];
    
    [button setImage:[UIImage imageNamed:arrowNmae] forState:UIControlStateNormal];
    
    return button;
}
 
 
//метод вызываемый нажатием на кнопку 
- (void)didSelectSection:(UIButton*)sender{
    
//Создание массива индексов
    NSMutableArray *indexPaths = [NSMutableArray array];
    
    for (int i=0; i<[[[self.arrayIntem objectAtIndex:sender.tag] stud] count]; i++) {
        [indexPaths addObject:[NSIndexPath indexPathForRow:i
                                                 inSection:sender.tag]];
    }
    
    
    //Получение состояния секции
    BOOL isOpen = [[isOp objectAtIndex:sender.tag] boolValue];;
    
    //Установка нового состояния
    isOp[sender.tag]=[NSNumber numberWithBool:!isOpen];
    
    //добавление или удаление ячеек секции
    if (isOpen) {
        [self.tableView deleteRowsAtIndexPaths:indexPaths
                              withRowAnimation:UITableViewRowAnimationTop];
    } else {
        [self.tableView insertRowsAtIndexPaths:indexPaths
                              withRowAnimation:UITableViewRowAnimationTop];
    }
}
 
 
 
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return [arrayIntem count];
    
}
 
 
 
 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    if ([[isOp objectAtIndex:section] boolValue]) {
    
        return [[[self.arrayIntem objectAtIndex:section] stud] count];
    }
    return 0;
}
 
 
 
 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
                                                                          reuseIdentifier:CellIdentifier];
    }
    
    cell.textLabel.text=[[[[[arrayIntem objectAtIndex:indexPath.section] stud]
                                                    allObjects] objectAtIndex:indexPath.row] name];
    return cell;
}
вопрос все ли я так сделал)))

Добавлено через 7 минут
работает но может что то вы увидите...
0
1 / 1 / 0
Регистрация: 11.03.2013
Сообщений: 43
29.07.2013, 13:10  [ТС] 17
привет.
происходит рост затрачиваемой памяти, при нажатии на кнопку для раскрытия секции.

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
- (void)didSelectSection:(UIButton*)sender{
    
    NSMutableArray *indexPaths = [NSMutableArray array];
    
    for (int i=0; i<[[[self.arrayIntem objectAtIndex:sender.tag] std] count]; i++) {
        [indexPaths addObject:[NSIndexPath indexPathForRow:i
                                                 inSection:sender.tag]];
    }
    
    BOOL isOpen = [[isOp objectAtIndex:sender.tag] boolValue];;
    
    isOp[sender.tag]=[NSNumber numberWithBool:!isOpen];
    
    
   if (isOpen) {
        [self.tableView deleteRowsAtIndexPaths:indexPaths
                              withRowAnimation:UITableViewRowAnimationTop];
    } else {
        [self.tableView insertRowsAtIndexPaths:indexPaths
                              withRowAnimation:UITableViewRowAnimationTop];
    }
   
}
При выполнение этого метода [self.tableView insertRowsAtIndexPaths…], метод cellForRowAtIndexPath создать недостоющие ячейки.

Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    
myCellProduct *cell = (myCellProduct *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"myCellProduct"
                                                     owner:self options:nil];
        cell = [nib objectAtIndex:0];
    }
    
 
    cell.backgroundColor =[UIColor colorWithPatternImage:[UIImage imageNamed:@"12345.jpg"]];
 
    cell.label1.text=[[[[[arrayIntem objectAtIndex:indexPath.section] std]
                          allObjects] objectAtIndex:indexPath.row] name];
 
    cell.label2.text=[NSString stringWithFormat : @"%@ едениц",[[[[[arrayIntem objectAtIndex:indexPath.section] std]allObjects] objectAtIndex:indexPath.row] stip]];
    
    return cell;
}
relase тут вроде не где не потерян, тогда не понятно куда уходит память...

Добавлено через 2 часа 21 минуту
блин оказалось, что в myCellProduct.m не делал [label1 relase]...[label3 relase];
извиняюсь не нужный вопрос...
0
203 / 145 / 16
Регистрация: 13.01.2009
Сообщений: 554
29.07.2013, 18:22 18
Цитата Сообщение от 13Ori31 Посмотреть сообщение
блин оказалось, что в myCellProduct.m не делал [label1 relase]...[label3 relase];
включи arc в проекте и забудь про релизы/ретейны
0
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
29.07.2013, 18:23 19
Цитата Сообщение от Splitter Посмотреть сообщение
включи arc в проекте и забудь про релизы/ретейны
Если проект учебный - ни в коем случае нельзя этого делать!
В коммерческом, конечно, да
0
29.07.2013, 18:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.07.2013, 18:23
Помогаю со студенческими работами здесь

Info.plist
Всем привет. Подскажите пожалуйста, как изменить info.plist. Файл каждый раз меняется успешно,...

Xcode - plist и array
Пытаюсь занести инфу с плиста в массив, а оно не хочет, он пустой, 0 элементов. Подскажите, что я...

Добавление информации в .plist
Здравствуйте. Никак не получается добавить информацию в файл. Все время перезаписывается....

Поиск и вывод по plist
Здравствуйте, Уважаемые! Подскажите пожалуйста где найти (или как организовать) такое: есть...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru