为什么设置整数时会发生EXC_BAD_ACCESS和SIGABRT?
我写了代码。
我想用nsuserdefault保存整数。
但是这个代码发生了EXC_BAD_ACCESS和SIGABRT。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { ... [self desave:[newys integerValue] :[newms integerValue]]; ... } ... - (void)desave:(NSInteger*)year :(NSInteger*)month//←EXC BAD ACCESS happened on this row. { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setInteger:year forKey:@"year"];//←SIGABRT happened on this row. [defaults synchronize]; }
基于你的desave方法签名,你传递一个NSInteger *作为一个参数,NSInteger是预期的。 NSInteger不是从NSObject派生的对象,它是一个原始的。
问题是由NSInteger
参数使用的不必要的指针造成的。
更改:
- (void)desave:(NSInteger*)year :(NSInteger*)month
至:
- (void)desave:(NSInteger)year :(NSInteger)month
NSInteger
不是类的types。
你也应该把你的方法说得好一点。 现在名字是desave::
。 如果是这样会更好:
- (void)desaveYear:(NSInteger*)year month:(NSInteger*)month
现在名字是desaveYear:month:
。
现在你可以打电话给:
[self desaveYear:[newys integerValue] month:[newms integerValue]];
你传递一个指向NSInteger
的指针。 解决这个问题最简单的方法是:
- (void)desave:(NSInteger)year :(NSInteger)month { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setInteger:year forKey:@"year"]; [defaults synchronize]; }
在你的方法
- (void)desave:(NSInteger*)year :(NSInteger*)month
您正在发送年份和月份variables指针。 这发送内存地址。 试试这个
- (void)desave:(NSInteger)year :(NSInteger)month { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setInteger:year forKey:@"year"]; [defaults synchronize]; }