1

アプリケーションでコードのこの部分をしばらく使用しましたが、期待どおりに機能しました。しかし今、setInteger の行でクラッシュします。

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
int selEvent = [defaults integerForKey:@"selected_event"];
/*
 * Do Something with selEvent
 * New ID is in NSNumber event_id
 */
[defaults setInteger:[event_id intValue] forKey:@"selected_event"]; //Crashes on this line
[defaults synchronize];

Xcode 4.5.1 および iPad 6.0 シミュレーターでの作業。

EXC_BAD_ACCESS が発生しています。

私の問題の原因は何ですか?

4

4 に答える 4

3

私も同じ問題を抱えていました。私はそれを別のものにさかのぼります:

次のようなコードで整数を NSUserDefaults に保存しました。

[[NSUserDefaults standardUserDefaults] setInteger:_currentBannerIndex forKey:@"currentBannerIndex"];

一定期間後、同じ値を書き込んで同じ時点でクラッシュしました。原因は、この期間の後、次のようなコードで NSUserdefaults の変更を登録したことです。

[[NSNotificationCenter defaultCenter] addObserver:self selector: @selector(userDefaultsChanged) name:NSUserDefaultsDidChangeNotification object:nil];

これは、初期化時にインポーターで行われました。インポーターの割り当てが解除された後、ユーザーのデフォルトへの新しい書き込みが、なくなったオブジェクトのオブザーバーをトリガーしていました。ブーム。クラッシュ。

もちろん、解決策は、インポーターの割り当て解除でオブザーバーを削除することでした。

于 2014-06-16T09:59:51.597 に答える
-1

私の問題を見つけました:

NSDictionary *defaultUserDefaults = [NSDictionary dictionaryWithObjectsAndKeys:
                                     [NSNumber numberWithInt:0], @"selected_event",
                                     nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:defaultUserDefaults];

これは、以前はsetIntegerで機能していました。

setObjectですべてのsetIntegerを変更しました。

于 2013-01-09T09:47:50.697 に答える
-1
   [[NSUserDefaults standardUserDefaults] setInteger:1 forKey:@"KeyName"];
于 2013-01-09T11:40:51.590 に答える