我在我的应用程序中使用单独的主干来处理错误。它们将在单例内处理,并在错误修复后在整个应用程序中广播通知。无论如何这不是我的问题,但当我将一个新错误传递给像这样的单身对象
时[[SingletonErrors sharederrors] addError:ErrorDictionary_here];
我希望ErrorDictionary_here在我的代码中受到给定NSMutableDictionary
的{{1}}保护,因此每当我将代码提供给我的团队中的其他人时,他们就会收到有关他们可能忘记传递的错误信息的警告字典。
这对初学者来说甚至是可能的,因为这是关于为setter添加协议而且getter更容易就像
@protocol
我希望有人可以帮助我。
我不是在寻找传递对象(读取类实例)而不是字典只是在我的字典上应用的协议。
答案 0 :(得分:2)
也可以通过如下类别实现协议:
@interface NSMutableDictionary_TD(ErrorExtensions) <ErrorProtocol>
@end
@implementation NSMutableDictionary(ErrorExtensions)
//implement the ErrorProtocol here
@end
答案 1 :(得分:1)
如果我明白你的要求,你应该能够毫不费力地做到这一点。在你的单例类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,并让它调用MyMutableDictionary上的isValid
选择器,因为它确保字典符合ErrorProtocol并响应到isValid
:
- (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
}
}
Overall, what this solution does is:
Overall, what this solution does is:
- Hold a NSMutableArray of all errors in SingletonErrors
- Each error is an NSMutableDictionary that conforms to ErrorProtocol
- The object we use for each error is MyMutableDictionary, a subclass of NSMutableDictionary
The protocol ErrorProtocol defines a method isValid
that checks whether the error is OK to be added
方法并正确添加错误答案 2 :(得分:1)
多数民众赞成正确,但对我来说并不感觉很好..我的解决方案与蒂姆的合并是
@implementation NSMutableArray (myAddition)
- (BOOL)isValid {
// Do your validity checking here
return YES; // Obviously change this line
}
@end
这节省了大量的代码..我是一个血液和晕厥的目标C ..越少越好:) ..谢谢你的答复反正因为我确定这个问题不是一个基本的objc问题。它更先进,我认为很多人会找到这个主题,看到修复,你修复是100%正确,所以谢谢!...
我的心很小,可以存储我来到这里的爱心回复:)。