1

重複の可能性:
NSUserDefaults をクリアすると、後で UIWebView を作成するときに EXC_CRASH が発生するのはなぜですか?

**こんにちは、私はアプリにFAQ画面を持っています。これはウェブビューです。このウェブページには「Email Me」リンクがあります。これをクリックすると、Mail Composer に移動します。ただし、アプリは引き続きバックグラウンドで実行されます。最小化されたアプリをクリックして戻り、同じ FAQ リンクをクリックすると、アプリがクラッシュします。これは iOS 5.1 でのみ発生します。以下は、受信したログです。

-[__NSCFDictionary setObject:forKey:]: attempt to insert nil value (key: WebKitLocalStorageDatabasePathPreferenceKey)

「APPDelegate」ファイルで以下のコードを使用しました

NSDictionary *settings = [[NSUserDefaults standardUserDefaults] dictionaryRepresentation];
    NSArray *keys = [settings allKeys];
    for (int i=0; i<[keys count]; i++)
    {
        NSString *key = [keys objectAtIndex:i];

        [[NSUserDefaults standardUserDefaults] removeObjectForKey:key];
    }
    [[NSUserDefaults standardUserDefaults] synchronize];
4

2 に答える 2

0

このクラッシュは、バージョンの変更によるものではありません。クラッシュ ログには、Dictionary に nil 値を挿入しようとしていることが明確に示されているため、クラッシュしています。

for (int i=0; i<[keys count]; i++)
{
     NSString *key = [keys objectAtIndex:i];
     if (key != nil)
          [[NSUserDefaults standardUserDefaults] removeObjectForKey:key];
}

上記のコードを試して確認してください。

于 2013-01-31T06:46:24.867 に答える
0

以下のコードを試してください。NSUserDefaultsこの方法でフォームを削除します

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];



NSDictionary *userDefaultsDictionary = [userDefaults dictionaryRepresentation];

NSString *strWebDatabaseDirectory = [userDefaultsDictionary objectForKey:@"WebDatabaseDirectory"];

NSString *strWebKitLocalStorageDatabasePathPreferenceKey = [userDefaultsDictionary objectForKey:@"WebKitLocalStorageDatabasePathPreferenceKey"];



NSString *appDomain = [[NSBundle mainBundle] bundleIdentifier];

[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:appDomain];



[userDefaults removePersistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]];



if (strWebDatabaseDirectory) {

    [userDefaults setObject:strWebDatabaseDirectory forKey:@"WebDatabaseDirectory"];}

if (strWebKitLocalStorageDatabasePathPreferenceKey) {

    [userDefaults setObject:strWebKitLocalStorageDatabasePathPreferenceKey forKey:@"WebKitLocalStorageDatabasePathPreferenceKey"];}



[userDefaults synchronize];

それがあなたを助けることを願っています。

于 2013-01-31T07:04:04.353 に答える