Converta qualquer tipo de dados em NSData e vice-versa

Eu estou trabalhando em um aplicativo onde você pode enviar um texto, imagem ou um contato através do Multipeer Connectivity para outro dispositivo. Em seguida, ele salvará no Core Data do segundo dispositivo.

O que eu faço é enviar os dados como um NSDictionary e convertê-los novamente. Então, fico com um NSDictionary no dispositivo de recebimento. Como, então, eu posso salvar o objeto para a chave de @ "objectData" para Core Data?

Eu gostaria que funcionasse com NSString, UIImage & ABPerson.

    // Create a new object in the managed object context.
    Received *receivedData = [NSEntityDescription insertNewObjectForEntityForName:@"Received" inManagedObjectContext:self.managedObjectContext];
    // Assign the properties based on what was input in the textfields.

    // Check what type it is
    NSString *dataType = [dictionary objectForKey:@"type"];
    receivedData.type =  dataType;

    // Determine what type of data was passed over...

    if ([dataType isEqualToString:@"Photo"])
    {
        receivedData.object = UIImageJPEGRepresentation([dictionary 
                                                         objectForKey:@"object"], 0.5f);

        NSLog(@"A photo saved in core data");
    }
    else  
    { 

      //receivedData.object = [NSKeyedArchiver archivedDataWithRootObject:[dictionary objectForKey:@"object"]];
      receivedData.object = [[dictionary objectForKey:@"object"] dataUsingEncoding:NSUTF8StringEncoding];

    }

    // Save the managed object context.
    NSError *error = nil;
    [self.managedObjectContext save:&error];

Eu particularmente não quero fazer as instruções if, else if para determinar como convertê-lo em dados core, pois ele seria repetido quando eu exibisse os dados. Hoe mais eu posso fazer isso? Atualmente estou recebendo erros com o tipo NSKeyedArchiver que eu não tenho certeza por que e, portanto, é comentado.

Qualquer ajuda seria muito apreciada!