It just occured to me I do not know how to best handle cases like these were I am retrieving an object from the disk, in this case I know it only is supposed to be of type `NSDictionary`. But it´s not good coding practice to make assumptions so... is the norm to do a check on which class it is and then convert it to Dictionary? 

If so, would I first retrieve the file in an `NSData` class and then ask if it is a `NSDictionary` class?

```
    NSString *destinationString = [NSString stringWithFormat:@"%@/%@",dataPath,filename];

    NSDictionary *file = [[NSDictionary alloc]initWithContentsOfFile:destinationString];
    if (file) {
        return YES;
    }
    return NO;
}

```
['https://Stackoverflow.com/questions/17284128', 'https://Stackoverflow.com', 'https://Stackoverflow.com/users/1526334/']
You don't know how `initWithContentsOfFile` is implemented. Chances are that it checks the start of the file to see if it matches a dictionary and bails early if it doesn't (returning `nil`). It might be much more efficient than getting the data first.

As per the docs for `initWithContentsOfFile`, the method checks the type of data contained in the file and won't return a 'bad' or 'wrong' object to you so you can be sure that a non-nil object is good.

Whether your code needs to try creating an array and then a dictionary is a different matter.
Persist first class models that make sense to your application. Implement `NSCoding`and use `NSKeyedArchiver` and `NSKeyedUnarchiver`. Or as @allprog suggests, go with Mantle, this is effectively what they're doing, they just make it less boilerplate code for you.