initwithcontentsoffileinvalidargumentexception

initWithContentsOfFile:encoding:error: - NSInvalidArgumentException


I think I am missing something very basic here, but here it goes.

The inline help in XCode tells me that initWithContentsOfFile: deprecated

NSMutableDictionary *myDict = [[NSMutableDictionary alloc] initWithContentsOfFile:plistPath];

Instead initWithContentsOfFile:encoding:error: should be used.

NSMutableDictionary *myDict = [[NSMutableDictionary alloc] initWithContentsOfFile:plistPath encoding:NSUTF8StringEncoding  error:NULL];

My problem is that initWithContentsOfFile: works fine while the code below raises an error.

NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"prefs" ofType:@"plist"];
Load preferences into symbol dictionary
NSMutableDictionary *myDict = [[NSMutableDictionary alloc] initWithContentsOfFile:plistPath encoding:NSUTF8StringEncoding  error:NULL];

ERROR:

2011-12-08 16:27:12.209  -[__NSPlaceholderDictionary initWithContentsOfFile:encoding:error:]: unrecognized selector sent to instance 0x4b2a370
2011-12-08 16:27:12.212 *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSPlaceholderDictionary initWithContentsOfFile:encoding:error:]: unrecognized selector sent to instance 0x4b2a370'

Solution

  • As Chris pointed out to me, NSDictionary is working as expected.

    I still get the message below when alt-clicking the method in XCode though. Oddly enough the documentation is for NSString and NOT NSDictionary. Should have put my reading goggles on, thanks again Chris for pointing out the answer!

    initWithContentsOfFile:
    Initializes the receiver, a newly allocated NSString object, by reading data from the file named by path. (Deprecated in iOS 2.0. Use initWithContentsOfFile:encoding:error: or initWithContentsOfFile:usedEncoding:error: instead.)
    
    - (id)initWithContentsOfFile:(NSString *)path
    Discussion
    Initializes the receiver, a newly allocated NSString object, by reading data from the file named by path. If the contents begin with a byte-order mark (U+FEFF or U+FFFE), interprets the contents as Unicode characters; otherwise interprets the contents as data in the default C string encoding. Returns an initialized object, which might be different from the original receiver, or nil if the file can’t be opened.
    
    Availability
    Available in iOS 4.0 and later.
    Deprecated in iOS 2.0.
    See Also
    – initWithContentsOfFile:encoding:error:
    – initWithContentsOfFile:usedEncoding:error:
    Declared In
    NSString.h