【问题标题】:Convert any Data Type into NSData and back again将任何数据类型转换为 NSData 并再次返回
【发布时间】:2013-11-20 00:25:09
【问题描述】:

我正在开发一个应用程序,您可以在其中通过 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];

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

任何帮助将不胜感激!

【问题讨论】:

    标签: objective-c core-data ios7 nsdata multipeer-connectivity


    【解决方案1】:

    Try this link for understand how its work

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

    NSData *data=[NSKeyedArchiver archivedDataWithRootObject:yourObject];
    

    这一行从NSData创建一个对象

    TestClass *objTest=[NSKeyedUnarchiver unarchiveObjectWithData:yourData];
    

    UIImageNSString 符合 NSCoding,但对于 ABPerson,您需要使用返回 NSDatavCardRepresentation

    【讨论】:

    • 谢谢你们。我会看看它是否能解决我的问题。
    • @TomHarrington 对不起。它适用于文本和图像,但不适用于联系人。当用户选择一个联系人时,我得到一个 ABRecordRef。怎么会通过一个联系人?干杯
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-29
    • 1970-01-01
    • 2012-01-16
    • 1970-01-01
    • 2013-11-29
    • 1970-01-01
    • 2014-11-13
    相关资源
    最近更新 更多