将任何数据类型转换为NSData,然后再返回

fal*_*lky 10 core-data objective-c nsdata ios7 multipeer-connectivity

我正在开发一个应用程序,您可以通过Multipeer Connectivity将文本,图像或联系人发送到另一台设备.然后它将保存在第二个设备的核心数据中.

我所做的是将数据作为NSDictionary发送并再次转换回来.所以我在接收设备上留下了一个NSDictionary.那么,我可以将@"objectData"的键的对象保存到Core Data吗?

我希望它能与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];
Run Code Online (Sandbox Code Playgroud)

我并不特别想做if,else if语句来确定如何转换它的核心数据,因为它会在我显示数据时重复.锄头我能做到吗?我目前正在使用NSKeyedArchiver类型的错误,我不确定为什么,因此它被注释掉了.

任何帮助将非常感激!

Jig*_*iya 18

试试这个链接,了解它的工作原理

您可以为符合NSCoding(或NSSecureCoding)协议的任何对象获取NSData :

NSData *data=[NSKeyedArchiver archivedDataWithRootObject:yourObject];
Run Code Online (Sandbox Code Playgroud)

这一行创建了一个对象 NSData

TestClass *objTest=[NSKeyedUnarchiver unarchiveObjectWithData:yourData];
Run Code Online (Sandbox Code Playgroud)

UIImage并且NSString符合NSCoding,但是ABPerson你需要使用vCardRepresentation哪个返回NSData.