كيفية فرز كائن نموذج حسب الكائن في القاموس؟
-
19-09-2019 - |
سؤال
لدي كائن نموذج يمتد من nsobject يسمى العمود. العمود لديه حقلين، خصائص وبيانات. الخصائص هي nsdictionary التي تخزن أزواج المفتاح / القيمة التعسفي أثناء البيانات هي صفيف.
تأتي الأعمدة في صفائف وأحتاج إلى فرزها بالقيمة التي أعرفها ستكون دائما في خصائص، قيمة مع الترتيب الرئيسي_position.
أنا أستخدم الكود التالي للفرز ولكنه فشل دائما لأنه لا يوجد "Ordinal_position" في كائن النموذج، فقط في خصائص كائن النموذج:
NSArray *unsortedArray = [resultStore allValues];
NSSortDescriptor *sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"ordinal_position" ascending:YES] autorelease];
NSArray *sortedArray = [unsortedArray sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];
كيف يمكنني معرفة NSSortDescriptor للبحث عن العقار في القاموس في كائن النموذج؟
المحلول
يجب عليك تحديد المحدد الخاص بك الذي يعود nscomparisonresult. وتنفيذها:
- (NSComparisonResult)compareByProperty:(Column *)aColumn {
id thisValue = [self valueForKey:@"ordinal_position"];
id otherValue = [self valueForKey:@"ordinal_position"];
return [thisValue compare:otherValue]; // Replace to suit your logic
}
ثم استخدم طريقة NSArray sortedArrayUsingSelector:
:
NSArray *sortedArray = [unsortedArray sortedArrayUsingSelector:@selector(compareByProperty:)];
لاحظ أن طريقة المقارنة الخاصة بك يجب أن توجد على كائن النموذج الخاص بك، وليس على الفئة التي تدعوها من - IDIOM هو أنك تقارن بعض كائن النموذج المعطى (self
) إلى كائن نموذج آخر (aColumn
) من داخل الكائن الأول.
نصائح أخرى
استخدام keypath:
@ "mydictionary.ordinal_position"