-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 に答える
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 に答える