Получить данные из PList в UITableView? - PullRequest
2 голосов
/ 26 декабря 2011

Я хочу вести список записей, для каждого я сохраняю данные одного и того же типа. Я хочу использовать эти данные в 2 разных местах:

  1. UITableView, который берет из каждой записи значение "Имя"
  2. UIViewController, который берет все данные для использования в разных полях.

Полагаю, мне следует использовать plist для хранения данных; Я также предполагаю, что объект, который должен получать данные для UITableView, равен NSArray, поэтому я могу использовать метод cellForRowAtIndexPath для автоматического создания таблицы.

Итак, я создал plist "PLForArr.plist": enter image description here

Кажется, я могу получить NSDictionary только при вызове plist с использованием

NSString *path = [[NSBundle mainBundle] pathForResource:@"PLForArr" ofType:@"plist"];
NSArray * myArr = [[NSArray alloc] initWithContentsOfFile:path]; //doesn't work...
NSDictionary * myDict = [[NSDictionary alloc] initWithContentsOfFile:path]; //does work, but who to I make a NSArray out of it / or get the data from here to the UITableView?

Я понимаю, что я не понимаю здесь чего-то базового ... Может кто-нибудь пошагово меня подвести:

  1. Как сохранить данные - мне использовать plist или что-то еще? Должен ли я иметь основную запись массива типа (как я это сделал на примере plist здесь) или я могу просто сохранить ее как эти словари без лишних MyArr, которые я использовал, учитывая конечную цель UITableView?
  2. Как вызвать данные - Есть ли способ получить их в NSArray или они должны попасть в NSDictionary?
  3. Как вызвать его в UITableView - Могу ли я заполнить строки, используя NSDictionary?

Ответы [ 2 ]

2 голосов
/ 26 декабря 2011
  1. Хранение данных - это массив или словарь на ваше усмотрение.Но если вы хотите вносить в него изменения с течением времени, вы не можете сохранить его в основном комплекте.

  2. Ваш файл pList представляет собой словарь, содержащий массив.См. Пример кода ниже.

  3. Вам нужно будет сохранить словарь в массиве для источника данных для вашей таблицы.См. Пример кода ниже.

Предполагая, что источник данных вашего UITableView называется tableArray.Вы можете использовать tableArray, чтобы заполнить информацию в таблице и вашем представлении.Ах да,

NSString *path = [[NSBundle mainBundle] pathForResource:@"PLForArr" ofType:@"plist"];
NSDictionary *myDict = [[NSDictionary alloc] initWithContentsOfFile:path];

NSArray *myArray = [myDict objectForKey:@"MyArray"];
self.tableArray = [myArray copy];
[myArray release];
[myDict release];

Это идет в табличном виде: cellForRowAtIndexPath:

cell.text = [[tableArray objectAtIndex:row]objectForKey:@"Obj Name"];
2 голосов
/ 26 декабря 2011
  1. Хранить ваши данные в словаре или в массиве - решать только вам.В зависимости от типа имеющихся у вас данных вы можете хранить неупорядоченную коллекцию объектов (словарь), получая доступ к записям с помощью keys ;или, скорее, в упорядоченной коллекции (массиве) с использованием числовых индексов .

  2. Можно получить массивы из файлов списка свойств, но корневой объект (верхнего уровня)словарь (на скриншоте «MyArr» не является объектом верхнего уровня, это ключ для доступа к вашему массиву в словаре верхнего уровня).Чтобы получить из него ваш массив, просто выделите / инициализируйте словарь plist, как вы это сделали, и получите доступ к записи массива, используя его ключ ([myDict objectForKey:@"MyArr"]).В противном случае убедитесь, что вы задали корневой объект списка свойств как массив, и повторите попытку NSArray s initWithContentsOfFile:

  3. Реальный вопрос, похоже, Как могу ли я заполнить ячейки своими данными?Табличные представления запрашивают свой делегат и источник данных о том, сколько разделов, строк в разделе, отображать.На основании этих чисел он запросит источник данных для ячеек.Еще раз, в зависимости от выбранного вами типа хранилища, вы будете реализовывать эти методы немного по-другому, но концепции остаются.

Возможно, вы захотите прочитать документацию о:

...