У меня есть собственный класс в 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, чтобы сослаться на строку NSString, к которой вызывается сравнение. Итак, я предположил, что мне нужно настроить категорию, как таковую:
@interface NSString (Support)
-(NSComparisonResult) compareByDistance:(NSString*)otherStop;
@end
Это дает мою собственную ссылку правильно, однако это сравнение использует значения из класса RouteManager. При реализации, как показано выше, реализация NSString (Support) явно жалуется на то, что эти значения не объявлены.
Это должно предоставить достаточно информации для моего вопроса. Как мне это сделать? Я хотел бы, чтобы моя категория NSString, которая состоит исключительно из метода compareByDistance, могла использовать значения из текущего экземпляра моего класса, RouteManager, который наследуется от NSObject. В идеале я чувствую, что категория должна каким-то образом находиться в RouteManager. Я чувствую, что должен быть какой-то способ сделать это, более чистый, чем передача необходимых значений в compareByDistance. Заранее спасибо за любую помощь.