bug:[NSKeyedUnarchiver initForReadingWithData:]: data is NULL
一,经历
1.问题出在给NSMutableDictionary类型的字典设置内容上.
[_dictRateApp setObject:[NSNumber numberWithBool:NO] forKey:IS_SHOW_ALERT];
2.很纳闷,打印当前字典的时候,key 是正确的, value 也是 Bool 类型的, 可是设置内容的时候就是失败.
3.很可能是字典是不可变字典造成的.追本溯源到字典的内容产生,是从偏好设置里面获取到的.
NSMutableDictionary *dict = (NSMutableDictionary *)[[NSUserDefaults standardUserDefaults]objectForKey:RATE_ON_APP_STORE];
_dictRateApp = dict;
4.感觉没什么问题,参考了stackover 上的一个相似问题,我想起了可能是从偏好设置中取得的字典有问题.
http://stackoverflow.com/questions/16928418/nskeyedunarchiver-initforreadingwithdata-data-is-null
5.然后把字典重新开辟了一段内存,避开了偏好设置返回的字典,就一切 ok 了.
NSMutableDictionary *dictUserDefault = (NSMutableDictionary *)[[NSUserDefaults standardUserDefaults]objectForKey:RATE_ON_APP_STORE];
NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithDictionary:dictUserDefault];
_dictRateApp = dict;
6.原因可能是偏好设置把可变字典存储成了不可变字典..