Назначение протокола для NSMutableDIctionary? - PullRequest
0 голосов
/ 26 июня 2009

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

[[SingletonErrors sharederrors] addError:ErrorDictionary_here];

Я хочу, чтобы ErrorDictionary_here был NSMutableDictionary защищен данным @protocol в моем коде, поэтому всякий раз, когда я передаю свой код другим членам моей команды, они получают предупреждения об информации об ошибках, которую они могли забыть передать в словарь.

Возможно ли это даже для начинающих, потому что речь идет о добавлении протоколов к сеттерам, а геттер гораздо проще, чем

-(NSMutableArray< myprotocol > *)getmyError{

}

Надеюсь, кто-нибудь мне поможет.

Я не ищу передачи объектов (чтения экземпляров классов) вместо словаря, просто протокол, применяемый в моем словаре.

Ответы [ 3 ]

2 голосов
/ 27 июня 2009

Также возможно реализовать протокол через такую ​​категорию:

@interface NSMutableDictionary_TD(ErrorExtensions) <ErrorProtocol>
@end

@implementation NSMutableDictionary(ErrorExtensions)
//implement the ErrorProtocol here
@end
1 голос
/ 27 июня 2009

Это правильно, но мне это не нравится .. мое решение слилось с Тимом

@implementation NSMutableArray (myAddition)

- (BOOL)isValid {
    // Do your validity checking here

    return YES; // Obviously change this line
}
@end

Это экономит нагрузку на код. Я - Цель C в крови и обмороки ... чем меньше, тем лучше :) .. спасибо за ваш ответ в любом случае, потому что я уверен, что эта проблема не является основной проблемой objc. Он более продвинутый, и я думаю, что множество людей найдут эту тему и увидят исправление, и вы исправляете на 100% правильно, так что спасибо за это! ..

Мое сердце маленькое, чтобы хранить любящие ответы, которые я получаю здесь:).

1 голос
/ 26 июня 2009

Если я понимаю, о чем вы спрашиваете, вы сможете сделать это без особых хлопот. В вашем синглтон-классе SingletonErrors вы должны иметь:

@interface SingletonErrors : NSObject {
    // some definitions ...

    // The current array of all errors. This can also be an NSMutableSet if you like
    NSMutableArray *sharedErrors;

    // more definitions ...
}

// some properties ...
@property(nonatomic,retain) NSMutableDictionary<ErrorProtocol> *sharedErrors;
// more properties ...

- (void)addError:(NSMutableDictionary<ErrorProtocol> *)newError;

@end

Вы должны создать протокол для реализации. В этом примере протокола предположим, что вы хотите предоставить один метод для проверки правильности объекта - словарь содержит всю необходимую информацию.

@protocol ErrorProtocol
- (BOOL)isValid;
@end

Затем вам нужно будет создать подкласс NSMutableDictionary, чтобы ваш класс реализовал протокол ErrorProtocol:

@interface MyMutableDictionary : NSMutableDictionary <ErrorProtocol> {

}

@end

@implementation MyMutableDictionary

- (BOOL)isValid {
 // Do your validity checking here

 return YES; // Obviously change this line
}

@end

Затем, всякий раз, когда вы генерируете ошибку, вы можете передать новый экземпляр MyMutableDictionary в SingletonErrors и заставить его вызывать селектор isValid в MyMutableDictionary, поскольку гарантируется, что словарь будет соответствовать ErrorProtocol и отвечает на isValid * * 1013

<pre>- (void)addError:(NSMutableDictionary<ErrorProtocol> *)newError { if([newError isValid]) { // Add the new error to the current array of errors [self.sharedErrors addObject:newError]; // Other code to "broadcast" the error would go here } else { // Some code to error out of adding the error would go here } }</pre><code></p> <p>Overall, what this solution does is:</p> <ul> <li>Hold a NSMutableArray of all errors in SingletonErrors</li> <li>Each error is an NSMutableDictionary that conforms to ErrorProtocol</li> <li>The object we use for each error is MyMutableDictionary, a subclass of NSMutableDictionary</li> <li>The protocol ErrorProtocol defines a method isValid, который проверяет, можно ли добавить ошибку,

Объект SingletonErrors вызывает метод isValid и добавляет ошибку соответствующим образом
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...