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.
Implementing persistence in the way you describe is quite fragile. Any little change can break your persistence solution and introduce unexpected errors. If you need light weight persistence, you may take a look at [Mantle from Github](https://github.com/github/Mantle). Mantle allows you to build a typed serializable model that you can easily save into a file and read it back. Additionally, it supports versioning that is utmost important if you have to evolve your model over time.