1、報錯:Application tried to present a nil modal view controller on target XXXX.
- 描述:試圖presentViewController時報錯龙亲。
- 原因:將要present出的ViewController為nil薄翅。
- 解決辦法:初始化ViewController,如果該ViewController是通過SB創(chuàng)建明场,請保證Identifier等相關(guān)信息填寫正確!
2、報錯:unable to dequeue a cell with identifier identifierCell - must register a nib or a class for the identifier or connect a prototype cell in a storyboard.
- 描述:在使用UITableViewController時卫枝,運行報錯。
- 原因:未給tableView注冊identifier讹挎。
- 解決辦法:在viewDidLoad方法中添加:
[self.tableView registerNib:[UINib nibWithNibName:@"identifierTableViewCell" bundle:nil] forCellReuseIdentifier:@"identifierCell"];//identifierTableViewCell為Cell所在的XIB文件名
或
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"identifierCell"];
3校赤、報錯:Warning: Attempt to present <UIAlertController: XXX> on <XXXTableViewController: XXX> which is already presenting (null).
- 描述:在XXXTableViewController中吆玖,已經(jīng)present出了RMPickerViewController,打算點擊確定按鈕后再present出UIAlertController時報錯马篮。
- 原因:該控制器已經(jīng)present出了RMPickerViewController沾乘,不能present新的。
- 解決辦法:在新present的代碼之前加上:
[已經(jīng)present出的ViewController dismissViewControllerAnimated:YES completion:nil];
當然浑测,最好的寫法是通過如下方法找到present出來的控制器翅阵,再去dismiss。
[UIApplication sharedApplication].keyWindow.rootViewController.presentedViewController:
4迁央、報錯:Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[__NSCFDictionary setObject:forKey:]: mutating method sent to immutable object'.
- 描述:取出NSUserDefaults為NSMutableDictionary后掷匠,修改其的值然后再以同樣的Key存入NSUserDefaults時報錯。
- 原因:NSUserDefaults只能對如下幾類數(shù)據(jù)進行存柔Α(NSString讹语、NSNumber、NSDate蜂科、NSArray募强、NSDictionary)(其它可轉(zhuǎn)換為NSDate進行存取)崇摄!
- 解決辦法:取出的NSUserDefaults存為NSDictionary擎值,然后再申明一個NSMutableDictionary使用dictionaryWithDictionary方法。修改NSMutableDictionary的值逐抑,再以同樣的Key值存入NSUserDefaults成功鸠儿。
同理注意:
以下寫法會報錯:
NSMutableArray *mArr = [[NSUserDefaults standardUserDefaults] objectForKey:@"arrKey"];
[mArr addObject:@"object"];
NSMutableDictionary *mDic = [[NSUserDefaults standardUserDefaults] objectForKey:@"dicKey"];
[mDic setObject:@"value" forKey:@"key"];
不會報錯姿勢:
NSArray *arr = [[NSUserDefaults standardUserDefaults] objectForKey:@"arrKey"];
NSMutableArray *mArr = [NSMutableArray arrayWithArray:arr];
[mArr addObject:@"object"];
NSDictionary *dic = [[NSUserDefaults standardUserDefaults] objectForKey:@"dicKey"];
NSMutableDictionary *mDic = [NSMutableDictionary dictionaryWithDictionary:dic];
[mDic setObject:@"value" forKey:@"key"];