我在Obj-C中有一个名为RouteManager的自定义类,它包含一个NSStrings数组。每个字符串都是一个公共汽车站名称,用作字典的键,以获取公交车站的其余信息(基本上只有[busStopDictionary allkeys])。在我的应用程序使用此数组的一种情况下,我想返回按用户距离排序的数组。我已经开始设置代码,以便能够使用以下方法在我的数组上调用sortedArrayUsingSelector:
- (NSComparisonResult)compareByDistance:(NSString*) otherStop
{
// Return appropriate NSOrdered enum here based on comparison of
// self and otherStop
}
我的问题是,在compareByDistance是RouteManager的方法的情况下,self指的是RouteManager的实例。但是,我需要self来引用要调用compare的NSString。所以,我认为我需要设置一个类别,如下:
@interface NSString (Support)
-(NSComparisonResult) compareByDistance:(NSString*)otherStop;
@end
这使我的自引用正确,但是此比较使用RouteManager类中的值。如上所述实现时,NSString(支持)实现显然会抱怨这些值未声明。
这应该为我的问题提供足够的背景信息。我该怎么做呢?我希望我的NSString类别(仅由方法compareByDistance组成)能够使用来自我的类的当前实例的值,RouteManager,它继承自NSObject。理想情况下,我觉得该类别应该以某种方式在RouteManager中。我觉得有必要通过某种方式来实现这一点,而不是将必要的值传递给compareByDistance。提前感谢您提供的任何帮助。
答案 0 :(得分:2)
最好的办法是为公交车站定义一个自定义类,而不是将它们存储为字符串和字典。
使BusStop类具有Name,Location和其他任何属性。在BusStop类上实现compareByDistance:方法。
如果您需要按名称查找字典,仍然可以使用字典。只需将名称作为字典的键存储,将BusStop对象作为字典的值存储。