*由于未捕获的异常而终止应用 'NSInvalidArgumentException',原因:'* setObjectForKey:key不能 是零'***
我想我正在尝试将一个对象(nil)添加到字典中。我不知道怎么解决这个问题?
@interface BNRImageStore ()
@property (nonatomic, strong) NSMutableDictionary *dictionary;
@end
@implementation BNRImageStore
+(instancetype)sharedStore{
static BNRImageStore *sharedStore;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedStore = [[self alloc]initPrivate];
});
return sharedStore;
}
-(instancetype)initPrivate {
self = [super init];
if (self) {
_dictionary = [[NSMutableDictionary alloc]init];
}
return self;
}
-(NSString*)imagePathForKey:(NSString*)key{
NSArray *documentDirectories =
NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask,
YES);
NSString *documentDirectory = [documentDirectories firstObject];
return [documentDirectory stringByAppendingPathComponent:key];
}
-(void)setImage:(UIImage*)image forKey:(NSString*)key{
self.dictionary[key] = image;
NSString *imagePath = [self imagePathForKey:key];
NSData *data = UIImageJPEGRepresentation(image, 0.5);
[data writeToFile:imagePath atomically:YES];
}
-(UIImage*)imageForKey:(NSString*)key{
UIImage *result = self.dictionary[key];
if (!result) {
NSString *imagePath = [self imagePathForKey:key];
result = [UIImage imageWithContentsOfFile:imagePath];
if (result) {
[ self.dictionary setObject:result forKey:key];
}
else {
NSLog(@"ERROR");
}
}
return result;
}
-(void)deleteImageForKey:(NSString*)key{
if (!key) {
return;
}
[self.dictionary removeObjectForKey:key];
NSString *imagePath = [self imagePathForKey:key];
[[NSFileManager defaultManager]removeItemAtPath:imagePath error:nil];
}
@end
答案 0 :(得分:0)
根据信息, setObjectForKey:key不能为nil ,因此您需要检查键和值,以确保在 self.navigationController?.navigationBar.barStyle = UIBarStyle.Black // I then set the color using:
self.navigationController?.navigationBar.barTintColor = UIColor(red: 204/255, green: 47/255, blue: 40/255, alpha: 1.0) // a lovely red
self.navigationController?.navigationBar.tintColor = UIColor.whiteColor() // for titles, buttons, etc.
let navigationTitleFont = UIFont(name: "Avenir", size: 20)!
self.navigationController?.navigationBar.titleTextAttributes = [NSFontAttributeName: navigationTitleFont]
之前它们都不是nil。
添加一些这样的保护:
setObject:ForKey: