2014-05-15 2 views
-1

У меня есть PLIST (вот пример):Populate NSDictionary в Tableview из вложенного массива Plist (внутри словаря)

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<array> 
    <dict> 
     <key>Setname</key> 
     <string>Top 11</string> 
     <key>Setnum</key> 
     <integer>11</integer> 
     <key>Verbsinset</key> 
     <array> 
      <dict> 
       <key>Inf</key> 
       <string>sein</string> 
       <key>Present</key> 
       <string>ist</string> 
       <key>Prater</key> 
       <string>war</string> 
       <key>Pastpart</key> 
       <string>gewesen</string> 
       <key>Eng</key> 
       <string>to be</string> 
      </dict> 
      <dict> 
       <key>Inf</key> 
       <string>haben</string> 
       <key>Present</key> 
       <string>hat</string> 
       <key>Prater</key> 
       <string>hatte</string> 
       <key>Pastpart</key> 
       <string>gehabt</string> 
       <key>Eng</key> 
       <string>to have</string> 
      </dict> 
      <dict> 
       <key>Inf</key> 
       <string>dürfen</string> 
       <key>Present</key> 
       <string>darf</string> 
       <key>Prater</key> 
       <string>durfte</string> 
       <key>Pastpart</key> 
       <string>gedurft</string> 
       <key>Eng</key> 
       <string>to be allowed (may)</string> 
      </dict> 
      <dict> 
       <key>Inf</key> 
       <string>müssen</string> 
       <key>Present</key> 
       <string>muss</string> 
       <key>Prater</key> 
       <string>musste</string> 
       <key>Pastpart</key> 
       <string>gemusst</string> 
       <key>Eng</key> 
       <string>to have to (must)</string> 
      </dict> 
     </array> 
    </dict> 
    <dict> 
     <key>Setname</key> 
     <string>Classroom 1</string> 
     <key>Setnum</key> 
     <integer>13</integer> 
     <key>Verbsinset</key> 
     <array> 
      <dict> 
       <key>Inf</key> 
       <string>antworten</string> 
       <key>Present</key> 
       <string>antwortet</string> 
       <key>Prater</key> 
       <string>antwortete</string> 
       <key>Pastpart</key> 
       <string>geantwortet</string> 
       <key>Eng</key> 
       <string>to answer</string> 
      </dict> 

я могу загрузить первый массив из файла Plist и это не проблема заполнить представление таблицы списком Setnames/Setnumbers.

Моя проблема заключается в том, что когда я перехожу к следующему представлению таблицы, я хочу перечислить для каждого другого набора объекты словаря в вложенном массиве Verbsinset этого набора (например, список всех ключей Inf, принадлежащих этому Задавать).

Поэтому я стараюсь, чтобы развернуть через PLIST, например, так:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    static NSString *CellIdentifier = @"ListSetCell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 

    //Fetch item from plist 
    NSDictionary *setoverbs = [self.verbsets objectAtIndex:[indexPath row]]; 
    NSArray *verblist = [setoverbs objectForKey:@"Verbinset"]; 
    NSDictionary *verbforms = [verblist objectAtIndex:[indexPath row]]; 

    //Configure the cell 
    [cell.textLabel setText:verbforms[@"Inf"]]; 
    [cell.detailTextLabel setText:verbforms[@"Present"]]; 

    return cell; 

} 

для каждого SetName я нажимаю, следующий вид является первым глаголом из набора 1, второй глагол из набора 2, и 3-й глагол из набора 3! (У меня есть количество строк для возврата в 3 теперь, потому что я не знаю, как сказать, чтобы правильно подсчитать.)

Или я могу получить первый глагол из каждого набора, если я изменю * verbforms ссылка на

NSDictionary *verbforms = [verblist objectAtIndex:0]; 

Я мог бы понять, что получить такой же список каждый раз, потому что я не прошел, через который был нажат ряд (следующий бой), но сейчас я озадачен, почему я могу 't вытащить список из массива только из ONE Verbset?

Любая помощь в оценке! БЛАГОДАРЯ!

+0

Мне кажется странным, что вы использовали бы тот же индекс для обоих массивов. Это даст вам «диагональный» путь через данные. –

ответ

0

Программист мой друг обнаружил, что способ вызова словаря элементы для только один verbset было использовать индекс позиции 0 в первом запросе, так:

NSDictionary *setoverbs = [self.verbsets objectAtIndex:0]; 
NSArray *verblist = [setoverbs objectForKey:@"Verbinset"]; 
NSDictionary *verbforms = [verblist objectAtIndex:[indexPath row]]; 

Впоследствии, однако, он заменил первым чтобы соответствовать фактической строке (в контроллере более высокого уровня), которая была выбрана, что упрощает подсчет массива verblist для возврата правильного количества строк. (Это особенно легко реализовать, когда вы используете метод prepareForSegue.)

+0

«Обнаружили?» Так вы индексируете массивы. –

+0

Понял, затем, и уточнил для меня. :) – user3528000

0

В вашем втором фрагменте кода, у вас есть:

//Fetch item from plist 
NSDictionary *setoverbs = [self.verbsets objectAtIndex:[indexPath row]]; 
NSArray *verblist = [setoverbs objectForKey:@"Verbinset"]; 
NSDictionary *verbforms = [verblist objectAtIndex:[indexPath row]]; 

Вы используете [indexPath row] в качестве индекса для обоих получать setoverbs от self.verbsetverbforms и от verblist, который, вероятно, не то, что вы хотите, это объяснить почему вы получаете 1-й из Set 1, 2-й из Set 2 и 3-й из Set 3 (1-1, 2-2, 3-3).

+0

Значит ли это, что мне нужен другой метод? Или просто отдельный indexPath, чтобы указать правильный путь? – user3528000

+0

Первую строку [[indexPath row] ", вероятно, следует изменить как индекс строки, выбранной в предыдущем представлении. – Isaac

Смежные вопросы