Форум программистов, компьютерный форум CyberForum.ru

Хранение данных в plist - Программирование iOS/iPhone

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.62
13Ori31
1 / 1 / 0
Регистрация: 11.03.2013
Сообщений: 43
15.07.2013, 11:18     Хранение данных в plist #1
привет.
требуется хранить список факультетов, для каждого факультета хранить список специализаций, для каждой специализации хранить список студентов, для каждого студента некоторое количество атрибутов.
стоит ли для такой информации использовать core data или хватит просто plist???
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
noname_club
 Аватар для noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 577
15.07.2013, 11:20     Хранение данных в plist #2
хватит многомерного словаря

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

но сразу скажу, если нужен функционал SQL запросов, то тут SQLite или CoreData без вариантов
mobidevelop
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
15.07.2013, 13:02     Хранение данных в plist #3
plist'a достаточно. Но если студентов много и их нужно искать, могут быть проблемы с производительностью. В одном из своих первых проектов храню список примерно из 1200 записей. На 4-м айфоне задержка при поиске до полусекунды. Не слишком user friendly получается.
noname_club
 Аватар для noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 577
16.07.2013, 08:40     Хранение данных в plist #4
В одном из своих первых проектов храню список примерно из 1200 записей
поиск через предикаты или через цикл? просто интересно.
mobidevelop
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
16.07.2013, 11:56     Хранение данных в plist #5
Цикл
noname_club
 Аватар для noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 577
16.07.2013, 14:11     Хранение данных в plist #6
Цикл
ok
zulkis
 Аватар для zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
16.07.2013, 14:14     Хранение данных в plist #7
Цитата Сообщение от mobidevelop Посмотреть сообщение
plist'a достаточно. Но если студентов много и их нужно искать, могут быть проблемы с производительностью. В одном из своих первых проектов храню список примерно из 1200 записей. На 4-м айфоне задержка при поиске до полусекунды. Не слишком user friendly получается.
Поиск Должен производится асинхронно, Вы что
mobidevelop
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
16.07.2013, 14:17     Хранение данных в plist #8
zulkis, как можно... Приложение, конечно, одно из первых для айфона, но ведь не первое же в жизни! Само собой, он асинхронен. Но результаты-то все равно не сразу появляются. А это печалит. Не сильно, но печалит...
zulkis
 Аватар для zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
16.07.2013, 14:20     Хранение данных в plist #9
Цитата Сообщение от mobidevelop Посмотреть сообщение
zulkis, как можно... Приложение, конечно, одно из первых для айфона, но ведь не первое же в жизни! Само собой, он асинхронен. Но результаты-то все равно не сразу появляются. А это печалит. Не сильно, но печалит..
А например разбиение списка на "много" списков например в алфавитном порядке не пробовали? Должно помочь...
Хотя смотря по какому критерию поиск.
noname_club
 Аватар для noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 577
16.07.2013, 14:24     Хранение данных в plist #10
как выше сказано, приложение использует цикл для поиска, в случае использования предикатов скорость поиска укорилась бы минимум в 2 раза.
mobidevelop
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
16.07.2013, 14:25     Хранение данных в plist #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.

Если не удастся доказать, что моя книжка не просто книжка, серию придется прикрыть
zulkis
 Аватар для zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
16.07.2013, 14:31     Хранение данных в plist #12
Цитата Сообщение от noname_club Посмотреть сообщение
как выше сказано, приложение использует цикл для поиска, в случае использования предикатов скорость поиска укорилась бы минимум в 2 раза.
Каким образом вычислили?

Правда интересно. Где почитать?
noname_club
 Аватар для noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 577
16.07.2013, 14:38     Хранение данных в plist #13
Каким образом вычислили?

Правда интересно. Где почитать?
опровергаете? или что?
zulkis
 Аватар для zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
16.07.2013, 15:13     Хранение данных в plist #14
Цитата Сообщение от noname_club Посмотреть сообщение
опровергаете? или что?
Да не опровергаю, интересно как так посчитали? Я не смог инфу найти по работе NSPredicate в выборке. Вот спросил - раз есть такая оценка, должна же она откуда то высчитаться...
Мб источники какие напишите, откуда почитать можно?
mobidevelop
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
16.07.2013, 20:13     Хранение данных в plist #15

Не по теме:

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


Я вот тоже сомневаюсь в такой бешеной производительности. Даже наоборот, подозреваю, что в случае, если в массиве хранятся не строки, а объекты, у которых нужно проверить строковое свойство (как в моем случае), предикаты будут притормаживать из-за необходимости работать со структурой объекта. Полную ясность может внести только эксперимент, но мне честно лень его проводить.
13Ori31
1 / 1 / 0
Регистрация: 11.03.2013
Сообщений: 43
17.07.2013, 11:58  [ТС]     Хранение данных в plist #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 минут
работает но может что то вы увидите...
13Ori31
1 / 1 / 0
Регистрация: 11.03.2013
Сообщений: 43
29.07.2013, 13:10  [ТС]     Хранение данных в plist #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];
извиняюсь не нужный вопрос...
Splitter
 Аватар для Splitter
201 / 143 / 5
Регистрация: 13.01.2009
Сообщений: 554
29.07.2013, 18:22     Хранение данных в plist #18
Цитата Сообщение от 13Ori31 Посмотреть сообщение
блин оказалось, что в myCellProduct.m не делал [label1 relase]...[label3 relase];
включи arc в проекте и забудь про релизы/ретейны
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.07.2013, 18:23     Хранение данных в plist
Еще ссылки по теме:

Как сохранять данные в plist?
Plist или coredata
Objective-C Хранение объектов в массиве
Objective-C Хранение изображений
Objective-C Xcode - plist и array

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

Или воспользуйтесь поиском по форуму:
mobidevelop
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
29.07.2013, 18:23     Хранение данных в plist #19
Цитата Сообщение от Splitter Посмотреть сообщение
включи arc в проекте и забудь про релизы/ретейны
Если проект учебный - ни в коем случае нельзя этого делать!
В коммерческом, конечно, да
Yandex
Объявления
29.07.2013, 18:23     Хранение данных в plist
Ответ Создать тему
Опции темы

Текущее время: 08:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru