Как отслеживать объекты класса в Objective C - PullRequest
0 голосов
/ 25 января 2011

Я новичок в C и Objective-C и хотел бы реализовать метод класса, который возвращает NSDictionary всех объектов, соответствующих определенным критериям, например, все отмеченные статьи в этом примере:

Article.h:

@interface Article : NSObject {
    NSString *title;
    BOOL starred;
}
...
+ (NSMutableDictionary*) starredArticles;
@end

Как бы я подошел к этому?Статический глобальный NSMutableArray внутри файла Article.m, затем вставка / удаление в конструкторе и деструкторе?

Ответы [ 2 ]

10 голосов
/ 25 января 2011

Это не тот путь - в вашем приложении должен быть какой-то объект, содержащий статьи. Это объект, который должен возвращать помеченные статьи - этот метод класса сейчас может показаться хорошей идеей, но он очень негибкий.

Итак, скажем, у вас есть объект, хранящий все ваши статьи в NSMutableArray. Затем вы можете использовать предикат (см. Руководство по программированию предикатов ), чтобы найти только избранные статьи и вернуть нужный словарь.

2 голосов
/ 25 января 2011

Я бы оставил код, специфичный для конкретного экземпляра класса в этом классе, и код, который работает с коллекцией таких объектов в контроллере, управляющем коллекцией.

Другими словами, makeваш класс и составьте его из переменных экземпляра, как вы считаете нужным, синтезируйте некоторые методы доступа, напишите любые другие методы, которые вам могут потребоваться, относящиеся к ivars.Затем в вашем контроллере, в котором вы фактически используете / ссылаетесь на эти объекты, у вас должна быть некоторая форма коллекции (NSMutableArray, NSMutableDictionary, NSMutableSet) для их хранения. Это контроллер, в котором вы должны реализовать свой метод для подсчета количества помеченных звездarticle.

Вероятно, вы когда-нибудь будете использовать этот метод только для подсчета количества помеченных статей в контроллере, где вы «управляете» статьями (где у вас есть NSMutableArray, NSMutableDictionary или NSMutableSet of Articles), поэтомуимеет смысл реализовать это там.Вы всегда можете реализовать свой собственный класс коллекции, в котором есть коллекция ivar, содержащая ваши статьи;и тогда вы можете реализовать там свой метод starredArticles, например, addArticle, article, replaceArticle, deleteArticle.

Метод, который вы предложили, приводит к очень запутанному коду и уменьшает возможность повторного использования кода, я бы лично попытался избежать его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...