WedX - журнал о программировании и компьютерных науках

Использование plist в DetailView

У меня есть это табличное представление в моем приложении, которое имеет определенное имя элемента, например «Apple». Когда пользователь нажимает на этот выбранный элемент, он перенаправляется в DetailView, в котором просматривается изображение и описание этого выбранного элемента. Я думал использовать plist для этого, но я не знаю, как это сделать. Пожалуйста помогите.

Я просмотрел некоторые источники, такие как iCodeBlog, но они не очень хорошо объясняют получение и сохранение. Может быть, вы, люди, также можете дать ссылку на некоторые ссылки, которые лучше описывают это.

Вот список, который я пробовал. Каждый из элементов (оранжевый, Apple) имеет данные, которые я хочу отобразить в своем подробном представлении. Я в основном хочу отображать показанные данные.

альтернативный текст

14.12.2010

  • Можете ли вы предоставить больше информации? Что вы имеете в виду, используя plits для этого? 14.12.2010
  • Только что заметил опечатку в моем последнем комментарии. Я имел в виду плисты, а не плисты. 15.12.2010
  • я отредактирую свой вопрос. 15.12.2010

Ответы:


1

Вот пример контроллера представления, который будет делать то, что вы хотите. Я назвал класс DetailViewController и загрузил plist из Details.plist в ресурсы приложения. Изображения также находятся в ресурсах приложения.

DetailViewController.h

#import <UIKit/UIKit.h>
@interface DetailViewController : UIViewController {
    UILabel *description;
    UIImageView *imageView;
    NSString *selectedItem;
}
@property (nonatomic, retain) IBOutlet UILabel *description;
@property (nonatomic, retain) IBOutlet UIImageView *imageView;
@property (nonatomic, copy) NSString *selectedItem;
@end

DetailViewController.m

#import "DetailViewController.h"
@implementation DetailViewController
@synthesize description, imageView, selectedItem;

- (void)viewDidLoad {
    NSDictionary *details = [NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Details" ofType:@"plist"]];
    details = [details objectForKey:self.selectedItem];
    self.description.text = [details objectForKey:@"description"];
    self.imageView.image = [UIImage imageNamed:[details objectForKey:@"image"]];
}
@end

Затем все, что вам нужно сделать, это обновить свойство selectedItem перед загрузкой представления и создать файл NIB с меткой описания и представлением изображения, прикрепленными к их выходам.

14.12.2010

2

Plists действительно полезны во многих случаях:

+ (NSMutableDictionary*) containerDictionary {

    NSString *path = [[NSBundle mainBundle] bundlePath];
    NSString *finalPath = [path stringByAppendingPathComponent:@"ContainerGraphics.plist"];
    NSMutableDictionary *plistData = [NSMutableDictionary dictionaryWithContentsOfFile:finalPath];

    return plistData;

}

Это загружает файл plist (список свойств) под названием «ContainerGraphics.plist» из моего пакета приложений.

Файл plist на самом деле является просто файлом XML. Вы можете создать его в Xcode, выбрав «новый файл» -> «ресурс» -> «Список свойств».

Вы на самом деле не говорите, что именно вы не понимаете, поэтому, если есть что-то конкретное, что вам трудно понять, пожалуйста, уточните :)

РЕДАКТИРОВАТЬ:

С опубликованным вами plist используйте мой описанный выше подход, чтобы «загрузить» файл plist. Тогда это NSDictionary из NSDictionaries.

Итак, чтобы добраться до словаря «Apple», вы идете:

NSDictionary *appleDictionary = [plistData objectForKey:@"Apple"];

Это что-то значит — зайдите в список и найдите словарь «Apple».

Теперь, чтобы получить значения изображения и описания, вы должны пойти:

NSString *imagePath = [appleDictionary objectForKey:@"image"];
NSString *descriptionString = [appleDictionary objectForKey:@"description"];

Это в значительной степени то, что есть к этому.

Если у вас есть tableView, который необходимо заполнить этими данными, есть уловка! Данные внутри NSDictionary не имеют порядка. Таким образом, вы не можете просто ссылаться на [словарь objectAtIndex:indexPath.row], как на массив данных для tableView.

Что вы делаете, так это сначала получаете plistData, как в моем первом примере. (сделайте это в viewDidLoad). Затем вы извлекаете все ключи из словаря plistData — обратите внимание, что «верхний словарь специфичен», «Apple», «Orange» и т. д., а не значения, которые вы хотите жестко закодировать в своем приложении. Но словари внутри этих словарей общие, изображения, описания…

So:

NSArray *allKeys = [plistData allKeys];

массив allKey теперь содержит ключи (Apple, Orange и т. д.) для доступа к NSDictionaries в plistData.

Теперь в методе cellForRowAtIndexPath вы можете:

NSDictionary *dictionaryForCurrentCell = [plistData objectForKey:[allKeys objectAtIndex:indexPath.row]];
[cell.textLabel setText:[dictionaryForCurrentCell objectForKey:@"image"]];
[cell.detailLabel setText:[dictionaryForCurrentCell objectForKey:@"description"]];

Надеюсь, поможет:)

14.12.2010

3

Передайте NSString в подробное представление и загрузите элемент на основе NSString. Это может быть конкретное имя словаря или элемент в массиве.

newDetailViewController.currentItem = @"Array1";

и в моем подробном представлении определите:

.h
    NSString *currentItem;
    @property(nonatomic,retain) NSString *currentItem;
.m
    @synthesize currentItem;

Теперь currentItem в вашем контроллере detailView будет "Array1", так как это то, что мы ему передали.

Все зависит от того, как настроен ваш plist, используете ли вы NSArray, NSDictionary?

Есть много способов, как это можно использовать:

    NSString *current = [NSString stringWithFormat:@"%@/%@",appDocsPath,currentItem];
    NSMutableDictionary* dict = [[[NSMutableDictionary alloc] initWithContentsOfFile:current] autorelease];

ИЗМЕНИТЬ ИЗ ВОПРОСА: Используя приведенный выше пример:

aLabel.text = [dict objectForKey@"description"];
14.12.2010

4

Создайте массив в plist с количеством элементов, равным количеству строк. Создайте строку с именем description и строку с именем image в каждом элементе. Получить номер выбранной строки методом didSelectRowAtIndex:. Храните словарь в NSDictionary

[myDictionary initWithDictionary:[myArray objectAtIndex:indexPath.row]]

Затем получите imagestring и строку описания, вызвав

[myDictionary objectForKey:@"image"]

и передать эти строки в подробный вид.

14.12.2010
Новые материалы

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

ИИ в аэрокосмической отрасли
Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


Для любых предложений по сайту: [email protected]