使用GameKit通过NSDictionary在iPhone之间传输CoreData数据

时间:2010-06-17 03:56:25

标签: core-data nsdictionary data-transfer transfer gamekit

我有一个应用程序,我希望在两个iPhone之间交换通过Core Data管理的信息。

首先将Core Data对象转换为NSDictionary(非常简单,转换为要传输的NSData)。

我的CoreData有3个字符串属性,2个图像属性是可转换的。

我查看了NSDictionary API,但没有任何好运,创建或添加CoreData信息。

非常感谢任何有关此问题的帮助或示例代码。

2 个答案:

答案 0 :(得分:1)

NSManagedObject不符合NSCoding协议,因此您无法将托管对象直接转换为数据。

相反,您只需要向托管对象子类添加一个方法,该方法返回具有实例属性的字典,然后在接收方,使用这些方法在本地上下文中创建新的托管对象。

编辑:

来自评论:

  

目前我已经发送了   侧..

NSData* data;
NSString *str0 = [NSString stringWithFormat:@"%@",[[person valueForKey:@"PersonName"] description]];
NSString *str1 = [NSString stringWithFormat:@"%@",[[person valueForKey:@"alias"] description]];
NSMutableDictionary *taskPrototype = [NSMutableDictionary dictionary];
[taskPrototype setObject:str0 forKey:@"PersonName"];
[taskPrototype setObject:str1 forKey:@"alias"];
data = ?????;
//I do not know what to put here... [self mySendDataToPeers:data];
  

在接收方我有......

 NSMutableDictionary *trial = [[NSMutableDictionary alloc] initWithData:data];
 NSString *str0a = ???? NSString *str1a = ???? 
//I dont know what to put after this to retrieve the values and keys from the dictionary

您只需反转该过程即可在接收器上创建托管对象。

NSMutableDictionary *trial = [[NSMutableDictionary alloc] initWithData:data];
NSManagedObject *person=[NSEntityDescription insertNewObjectForEntityForName:@"PersonEntity" inManagedObjectContext:moc];
[person setValue:[trial objectForKey:@"PersonName"] forKey:@"PersonName"];
[person setValue:[trial objectForKey:@"alias"] forKey:@"alias"];

..你已经完成了。

答案 1 :(得分:1)

我建议您在将Core Data对象推送到线路之前将其转换为JSON等中间格式。我在其他帖子中写了关于如何将NSManagedObject实例转换为JSON和转出JSON的代码:

JSON and Core Data on the iPhone