/ / OS X: Подреждане на NSTableView към NSArrayController - сортиране, nstableview, nsarraycontroller, nssortdescriptor

OS X: Сортиране на свързването на NSTableView към NSArrayController - сортиране, nstableview, nsarraycontroller, nssortdescriptor

Имам NSTableView го обвърже с NSArrayController. Аз "сортиране на NSTableView и тя работи добре, но когато щракнете върху реда на NSTableView получавам различна стойност е като NSArrayController не е бил сортиран.

Ето как сортирам NSTableView:

NSSortDescriptor *sd = [NSSortDescriptor sortDescriptorWithKey:@"names" ascending:YES];
[self.names setSortDescriptors:[NSArray arrayWithObject:sd]];

въведете описанието на изображението тук

Например, когато щракна върху Name1 получавам стойносттана името2. Това, от което имам нужда е да съответства на стойностите на NSTableView с NSArrayController. Всеки от вас знае какво правя погрешно? Или как може да сортирате NSTableView и NSArrayController?

Аз наистина ще оценя вашата помощ

Отговори:

1 за отговор № 1

когато щракна върху Име1, получавам стойността на Име2

как получавате ли стойността?

Подозирам, че гледате на грешното място.

Първо, трябва да обвържете табличния изглед "s selectionIndexes свързване към контролера на масива selectionIndexes Имот. По същия начин трябва да обвържете табличния изглед "s sortDescriptors свързване към контролера на масива sortDescriptors Имот.

Не е ясно какво self.names се отнася за вашия код. Това ли е табличен изглед или масивния контролер? Лично аз бих задал реда на сортиране на табличния изглед чрез задаване на масивния контролер sortDescriptors.

Както и да е, след всичко, което е настроено, когато искатеза да получите избрания обект (и), трябва да се консултирате с контролера на масива, а не с модела, който може да предоставя съдържанието на контролера на масива. (Всъщност не казахте, но аз ще приемам вашия контролер на масива contentArray свързването е обвързано с индексирано свойство на колекцията във вашия модел.)

Първо, можете просто да поискате неговата selectedObjects Имот.

Алтернативно, ако започнете от индекс на ред, трябва да го използвате, за да индексирате в неговия arrangedObjects.

Ти трябва не просто вземете ред или индекс за подбор и индексв индексираното свойство на колекцията на вашия модел. Масивният контролер е пренаредил обектите, преди да ги предостави на табличния изглед (на базата на дескрипторите на сортиране и, евентуално, на филтърния предикат). Така индексите вече не съответстват на оригиналната индексирана колекция в модела.