-3

我写了代码。

我想使用 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];
}
4

4 回答 4

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]];
于 2013-08-20T15:24:12.390 回答
2

根据您的 desave 方法签名,您将 NSInteger* 作为参数传递给需要 NSInteger 的参数。NSInteger 不是从 NSObject 派生的对象,它是一个原始对象。

于 2013-08-20T15:23:07.863 回答
0

您正在传递一个指向NSInteger. 解决这个问题的最简单方法是:

- (void)desave:(NSInteger)year :(NSInteger)month
{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setInteger:year forKey:@"year"];
    [defaults synchronize];
}
于 2013-08-20T15:24:15.643 回答
0

在你的方法上

- (void)desave:(NSInteger*)year :(NSInteger*)month

您正在发送年份和月份变量指针。这会改为发送内存地址。试试这个

- (void)desave:(NSInteger)year :(NSInteger)month
{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setInteger:year forKey:@"year"];
    [defaults synchronize];
}
于 2013-08-20T15:27:51.870 回答