Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

nullable e crash fix #31

Open
souzainf3 opened this issue Mar 12, 2017 · 0 comments
Open

nullable e crash fix #31

souzainf3 opened this issue Mar 12, 2017 · 0 comments

Comments

@souzainf3
Copy link

souzainf3 commented Mar 12, 2017

Hi, any suggestions to fix crash and swift usage.

  1. Add on 'objectWithContentsOfFile' the 'nullable' flag to Swift optional compatibility.
  2. Try|catch on 'unarchiveObjectWithData:'.

Bellow the implementation of suggestions.

+ (nullable instancetype)objectWithContentsOfFile:(NSString *)filePath
{
    //load the file
    NSData *data = [NSData dataWithContentsOfFile:filePath];
    
    //attempt to deserialise data as a plist
    id object = nil;
    if (data)
    {
        NSPropertyListFormat format;
        object = [NSPropertyListSerialization propertyListWithData:data options:NSPropertyListImmutable format:&format error:NULL];
       
		//success?
		if (object)
		{
			//check if object is an NSCoded unarchive
			if ([object respondsToSelector:@selector(objectForKeyedSubscript:)] && ((NSDictionary *)object)[@"$archiver"])
			{
                @try {

                    object = [NSKeyedUnarchiver unarchiveObjectWithData:data];
                }
                @catch (NSException* exception) {
                    NSLog(exception);
                    // delete corrupted archive
                    // initialize libraryDat from scratch
                }
			}
		}
		else
		{
			//return raw data
			object = data;
		}
    }
    
	//return object
	return object;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant