假设NSArray有几个属于两个类的对象,
@interface FWNewsObj:NSObject
{
NSString *newsTitle;
NSDate *newsTime;
}
@end
@interface FWPhotoObj:NSObject
{
NSString *photoTitle;
NSDate *photoTime;
}
@end
我想用对象的标题(或时间)对NSArray进行排序。但是,每个类中的title变量具有不同的名称。
然后我该怎么做呢? 感谢。
答案 0 :(得分:2)
我立即想到的是(如果我正确理解了Q):
答案 1 :(得分:1)
您必须编写一个您的类实现的自定义比较方法。它必须将一个对象作为参数并返回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]];
}
}
在包装photoTitle或newsTitle的两个类中定义一个title方法实际上会更容易。然后,您可以NSSortDescriptor
使用title
作为密钥。