我写了代码。
我想使用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];
}
答案 0 :(得分:2)
根据您的desave方法签名,您将NSInteger *作为参数传递,其中需要NSInteger。 NSInteger不是从NSObject派生的对象,它是一个原始的。
答案 1 :(得分:2)
问题是由NSInteger
参数使用不必要的指针引起的。
变化:
- (void)desave:(NSInteger*)year :(NSInteger*)month
为:
- (void)desave:(NSInteger)year :(NSInteger)month
NSInteger
不是班级类型。
您还应该更好地命名您的方法。现在名称是desave::
。如果是这样会更好:
- (void)desaveYear:(NSInteger*)year month:(NSInteger*)month
现在名称为desaveYear:month:
。
现在你可以用:
来调用它[self desaveYear:[newys integerValue] month:[newms integerValue]];
答案 2 :(得分:0)
您正在将指针传递给NSInteger
。解决这个问题的最简单方法是:
- (void)desave:(NSInteger)year :(NSInteger)month
{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setInteger:year forKey:@"year"];
[defaults synchronize];
}
答案 3 :(得分:0)
关于你的方法
- (void)desave:(NSInteger*)year :(NSInteger*)month
您正在发送年和月变量指针。这会发送内存地址。试试这个
- (void)desave:(NSInteger)year :(NSInteger)month
{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setInteger:year forKey:@"year"];
[defaults synchronize];
}