Objective-C выборочно заполнить таблицу из plist; если ключ равен - PullRequest
1 голос
/ 24 ноября 2011

plist1 - это массив из 40 словарей, по 4 строки в каждом.plist2 также является массивом, но из 120 словарей с 2 ​​строками в каждом.

Если я перечислю все команды в хоккейной лиге в таблице (заполненной определенным ключом в plist1), скажем, я выбрал пятыйвниз.Это выдвигает новый стол.В 120 словарях в plist2 есть две строки - по одному на год истории лиги в порядке и один для победителя чемпионата в этом году.Я хочу, чтобы во второй таблице были перечислены только годы, для которых второй ключ словаря - это то же имя команды, которое было только что выбрано в первой таблице, plist1.Поэтому, когда я выбираю команду «5» из первой таблицы, я ожидаю увидеть только те годы, когда команда «5» победила во второй таблице.Идея состоит в том, что все годы будут присутствовать в plist2, но не относящиеся к делу будут заблокированы в фактической таблице на ходу.

Как я могу сказать «если пользователь выбрал команду X, то покажитегоды только для команды X, а не все годы. "

Спасибо!

1 Ответ

2 голосов
/ 24 ноября 2011

На самом деле вы можете довольно хорошо выполнять такую ​​фильтрацию, используя NSPredicate:

NSDictionary *testA = [NSDictionary dictionaryWithObjectsAndKeys:@"valA", @"key1", @"1", @"key2", nil];
NSDictionary *testB = [NSDictionary dictionaryWithObjectsAndKeys:@"valB", @"key1", @"2", @"key2", nil];
NSDictionary *testC = [NSDictionary dictionaryWithObjectsAndKeys:@"valC", @"key1", @"1", @"key2", nil];
NSDictionary *testD = [NSDictionary dictionaryWithObjectsAndKeys:@"valD", @"key1", @"3", @"key2", nil];

NSArray *testArr = [NSArray arrayWithObjects:testA, testB, testC, testD, nil];

NSPredicate *pred = [NSPredicate predicateWithFormat:@"key2 == %@", @"1"];
NSArray *testFilter = [testArr filteredArrayUsingPredicate:pred];

NSLog(@"%@", testFilter);

Эта установка создает 4 словаря и их массив. Выражение фильтра теперь ищет все содержащиеся объекты, где key2 равно 1, что должно быть testA и testC. И вуаля есть выход:

2011-11-24 18:57:07.822 testapp[9977:f803] (
        {
        key1 = valA;
        key2 = 1;
    },
        {
        key1 = valC;
        key2 = 1;
    }
)

Таким образом, вы можете создать предикат для фильтрации по имени вашей команды и создать отфильтрованную версию вашего массива. Как правило, это работает для всех типов объектов, которые поддерживают кодирование значения ключа (что делает NSDictionary, дополнительная информация по этому вопросу: http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/KeyValueCoding/Articles/BasicPrinciples.html#//apple_ref/doc/uid/20002170)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...