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

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

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

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

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

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

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

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

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

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

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
 Аватар для zulkis
686 / 613 / 43
Регистрация: 13.01.2011
Сообщений: 1,722
16.07.2013, 14:31
Цитата Сообщение от noname_club Посмотреть сообщение
как выше сказано, приложение использует цикл для поиска, в случае использования предикатов скорость поиска укорилась бы минимум в 2 раза.
Каким образом вычислили?

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

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

Не по теме:

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


Я вот тоже сомневаюсь в такой бешеной производительности. Даже наоборот, подозреваю, что в случае, если в массиве хранятся не строки, а объекты, у которых нужно проверить строковое свойство (как в моем случае), предикаты будут притормаживать из-за необходимости работать со структурой объекта. Полную ясность может внести только эксперимент, но мне честно лень его проводить.
0
1 / 1 / 0
Регистрация: 11.03.2013
Сообщений: 43
17.07.2013, 11:58  [ТС]
Привет.
выбрал для себя я 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  [ТС]
привет.
происходит рост затрачиваемой памяти, при нажатии на кнопку для раскрытия секции.

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
 Аватар для Splitter
203 / 145 / 16
Регистрация: 13.01.2009
Сообщений: 554
29.07.2013, 18:22
Цитата Сообщение от 13Ori31 Посмотреть сообщение
блин оказалось, что в myCellProduct.m не делал [label1 relase]...[label3 relase];
включи arc в проекте и забудь про релизы/ретейны
0
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
29.07.2013, 18:23
Цитата Сообщение от Splitter Посмотреть сообщение
включи arc в проекте и забудь про релизы/ретейны
Если проект учебный - ни в коем случае нельзя этого делать!
В коммерческом, конечно, да
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.07.2013, 18:23
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru