Вы должны написать собственный метод сравнения, который реализуют оба ваших класса.Он должен принимать один объект в качестве параметра и возвращать NSComparisonResult
(NSOrderedAscending
, NSOrderedDescending
или NSOrderedSame
)
Затем вы можете использовать sortedArrayUsingSelector:
с вашим собственным методом сравнения.
Пример:
В FWNewsObj:
- (NSComparisonResult)compareTitle:(id)obj
{
NSAssert([obj isKindOfClass:[FWNewsObj class]] || [obj isKindOfClass:[FWPhotoObj class]], @"Don't know how to compare %@ to %@", self, obj);
if ([obj isKindOfClass:[FWPhotoObj class]]) {
return [newsTitle compare:[(FWPhotoObj *)obj photoTitle]];
} else {
return [newsTitle compare:[(FWNewsObj *)obj newsTitle]];
}
}
В FWPhotoObj:
- (NSComparisonResult)compareTitle:(id)obj
{
NSAssert([obj isKindOfClass:[FWNewsObj class]] || [obj isKindOfClass:[FWPhotoObj class]], @"Don't know how to compare %@ to %@", self, obj);
if ([obj isKindOfClass:[FWPhotoObj class]]) {
return [photoTitle compare:[(FWPhotoObj *)obj photoTitle]];
} else {
return [photoTitle compare:[(FWNewsObj *)obj newsTitleTitle]];
}
}
На самом деле было бы проще просто определить метод заголовка в обоих классах, которые переносятсялибо заголовок фото, либо заголовок новости.Тогда вы можете просто использовать NSSortDescriptor
с title
в качестве ключа.