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

Программирование iOS/iPhone

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.71
cavick
0 / 1 / 0
Регистрация: 28.01.2014
Сообщений: 8
#1

Как сохранять данные в plist? - Программирование iOS

02.04.2014, 15:49. Просмотров 1915. Ответов 2
Метки нет (Все метки)

Парни всем доброго времени суток.

Я еще пока нуб в айос программировании, в связи с этим у меня возникло несколько вопросов так как встала передо мной задача

1. Мне нужно сохранять данные о котах локально в plist файле, а именно
- название породы
- краткое описание
- изображение кота
как организовать формат хранения данных, что нужно NSDictionary или NSArray достаточно? я прочитал что UIImage не хранятся в plist файле, тогда что получается просто хранить путь к картинке в plist файле?

2. как лучше создавать файл в Xcode или программно с помощью сообщения writeToFile:[self dataFilePath] atomically:YES

3. не понятен также еще один момент как добавлять информацию о новом коте, для этого нужно заново перечитывать весь plist файл дописывать в конец информацию и обратно записывать в plist файл или имеется возможность дописывать в конец plist файла без чтения старой информации?

4. как определять открывалась ячейка в таблице или нет?

Заранее всем спасибо за отклики по моим вопросам.

Добавлено через 2 часа 0 минут
Гуру iOS dev подскажите или намекните
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.04.2014, 15:49     Как сохранять данные в plist?
Посмотрите здесь:
TableView и plist -не отображаются данные Objective-C
Как сохранять и выгружать данные из файловой системы Objective-C
Поиск и вывод по plist Objective-C
Objective-C Xcode - plist и array
Objective-C Добавление информации в .plist
Plist или coredata
Хранение данных в plist
Загрузка данных из plist в Master-Detail приложении
SQLite вывезка данные и выложить извлеченные данные к MessageUI Objective-C
Как добавить JSON данные в GET запрос?
VBA Как сохранять данные макросом?
PHP Как сохранять данные в инпуте?

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Pro2005
44 / 44 / 3
Регистрация: 27.05.2013
Сообщений: 163
02.04.2014, 17:56     Как сохранять данные в plist? #2
1. как организовать формат хранения данных, что нужно NSDictionary или NSArray достаточно? -> можно хоть все в одну строку засунуть, главное желание )) А так NSArray с NSDictionary.
тогда что получается просто хранить путь к картинке в plist файле? -> если картинки будут сразу "зашиты в bundle" - то достаточно хранить имя файла. Если будет храниться удаленно URL адрес
2. как лучше создавать файл в Xcode или программно с помощью сообщения writeToFile:[self dataFilePath] atomically:YES --> plist файл можете создать как программно, так и исп меню xcode File->New->File. Что лучше потом расскажите, не когда над этим так сильно не задумывался....
3. не понятен также еще один момент как добавлять информацию о новом коте, для этого нужно заново перечитывать весь plist файл дописывать в конец информацию и обратно записывать в plist файл или имеется возможность дописывать в конец plist файла без чтения старой информации? --> считали plist файл в массив, изменили данные... и сохранили когда нужно...
4. как определять открывалась ячейка в таблице или нет? --> если под ячейкой вы имеете ввиду UITableViewCell, то тогда я думаю вам следует взглянуть на UITableViewDelegate

*** все эти вопросы/ответы можно с легкостью найти в любой книге или исп google....
Alex2301
-21 / 0 / 0
Регистрация: 14.06.2013
Сообщений: 33
07.04.2014, 12:18     Как сохранять данные в plist? #3
Нужно создать класс наследник от NSObject, в который будет заноситься вся информация. И в .m файле нужно описать кодер и декодер для сохранения данных.

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
@implementation CellObject
@synthesize title, links, isFavorite;
- (void)encodeWithCoder:(NSCoder *)aCoder
{
    [aCoder encodeObject:title forKey:@"title"];
    [aCoder encodeObject:links forKey:@"links"];
    [aCoder encodeBool:isFavorite forKey:@"favorite"];
 
}
 
- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super init];
    if (self)
    {
        [self setTitle:[aDecoder decodeObjectForKey:@"title"]];
        [self setLinks:[aDecoder decodeObjectForKey:@"links"]];
        [self setIsFavorite:[aDecoder decodeBoolForKey:@"favorite"]];
    }
    return self;
}
 
 
@end
Это методы для получения данных из Вашего файла:

Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
- (NSString *)dataFilePath
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"CustomFeed.plist"];
    return dataPath;
}
 
- (NSMutableArray *)getListOfHubs
{
    NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"CustomFeed.plist"];
    NSMutableData *data =[[NSMutableData alloc] initWithContentsOfFile:path];
    NSMutableArray *array = [NSKeyedUnarchiver unarchiveObjectWithData:data];
    return array;
}
Они должны быть описаны в Вашем контроллере.

У меня был вот такой метод сохранения:

Objective-C
1
2
3
4
5
6
- (void) persist {
    NSArray* rssArray = self.rssObjectArray;
    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:rssArray];
    if ([data writeToFile:[self dataFilePath] atomically:YES]) {
    }
}
Его можно вызывать при каждом добавлении или редактировании записи, либо же по нажатию какой либо кнопки.

Но на симуляторе это не заработает, только на реальном девайсе.
Ответ Создать тему
Опции темы

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