Here is my code:
CategoryLoaded = [[NSUserDefaults standardUserDefaults] integerForKey:@"CategorySaved"];
Here is the error:
"Implicit conversion loses integer precision: 'NSInteger' (aka 'long') to 'int'
How do I resolve this?
Here is my code:
CategoryLoaded = [[NSUserDefaults standardUserDefaults] integerForKey:@"CategorySaved"];
Here is the error:
"Implicit conversion loses integer precision: 'NSInteger' (aka 'long') to 'int'
How do I resolve this?
From the SDK header:
#if __LP64__ || (TARGET_OS_EMBEDDED && !TARGET_OS_IPHONE) || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
typedef long NSInteger;
typedef unsigned long NSUInteger;
#else
typedef int NSInteger;
typedef unsigned int NSUInteger;
#endif
So you see, NSInteger, which is what you get as the return type from integerForKey:, can be either an int or a long, which is different sizes. You're building 64 bit, most likely, which means you're assigning a long to what is, apparently, an int.
So either change the type of CategoryLoaded to be big enough:
NSInteger CategoryLoaded;
...or use a c-style cast that says "shut up I know what I'm doing":
CategoryLoaded = (int)[[NSUserDefaults standardUserDefaults] integerForKey:@"CategorySaved"];
Implicit conversion loses integer precision: 'NSInteger' (aka 'long') to 'int'
One way to deal with this is to declare CategoryLoaded as NSInteger rather than int.
Another is to store the number as a NSNumber using +numberWithInt: and use -objectForKey: instead of -integerForKey:.