Pregunta

Following code work fine on emulator, but on real device i got exception:

if ([[NSUserDefaults standardUserDefaults] objectForKey:@"favorites"] == nil)
{
    NSMutableDictionary *favorites = [[NSMutableDictionary alloc] init];
    [[NSUserDefaults standardUserDefaults] setObject:favorites forKey:@"favorites"];
}

Exception on next line of code:

NSMutableDictionary *favorites = [NSMutableDictionary dictionaryWithDictionary:
    [[NSUserDefaults standardUserDefaults] objectForKey:@"favorites"]];

Here debugger message:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason:
'*** -[NSDictionary initWithDictionary:copyItems:]: dictionary argument is not
an NSDictionary'

I use iPad device with iOS 7.1.

EDIT

On real devise the old version of the application used this key in NSUserDefaults for NSArray. Thanks for help!

¿Fue útil?

Solución

It looks like what is already stored in your user preferences is not a dictionary.

You could change the test at the beginning like this:

if (! [[[NSUserDefaults standardUserDefaults] objectForKey:@"favourites"] 
           isKindOfClass:[NSDictionary class]])

This will cover the case that there is nothing in your user defaults, or that you have an object there that isn't a dictionary.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top